문제

무엇을"비 원자"를 의미에 이 코드는?

@property(nonatomic, retain) UITextField *theUsersName;

의 차이점은 무엇입 원자 세분화 및?

감사

도움이 되었습니까?

해결책

살펴보십시오 사과 문서.

기본적으로 말하면 nonatomic, 당신은 사용을 사용하여 액세서를 생성합니다 @synthesize, 그런 다음 여러 스레드가 한 번에 속성을 변경/읽으려고하면 악이 발생할 수 있습니다. 부분적으로 작성된 값 또는 과도한 출시/유지 객체를 얻을 수 있으며, 이는 쉽게 충돌을 일으킬 수 있습니다. (그러나 이것은 원자 액세서보다 훨씬 빠릅니다.)

기본값을 사용하는 경우 (그렇습니다 atomic; 이에 대한 키워드는 없었지만 지금입니다), 그런 다음 @synthesizeD 메소드는 객체 수준 잠금을 사용하여 단일 속성에 대한 다중 읽기/쓰기가 직렬화되도록합니다. Apple Docs가 지적했듯이 그렇다고 전체 객체가 스레드 안전하다는 의미는 아닙니다, 그러나 개별 재산은 읽거나 쓰는 것입니다.

물론 사용하기보다는 자신의 액세서를 구현하는 경우 @synthesize, 나는 이러한 선언이 속성이 실시 된 방식으로 구현되는지에 대한 의도를 표현하는 것 외에는 아무것도하지 않는다고 생각합니다.

다른 팁

너무 많은 기사와 stackoverflow 게시물을 읽고 가변 속성 속성을 확인하기 위해 데모 앱을 만든 후 모든 속성 정보를 합치기로 결정했습니다.

  1. 원자 // 기본값
  2. 비 원자
  3. strong = restain // 기본값
  4. 약한 = unsafe_unretained
  5. 유지하다
  6. // 기본값을 할당합니다
  7. insafe_unretained
  8. 복사
  9. 준비 적
  10. readWrite // 기본값

아래는 위에서 언급 한 모든 속성을 찾을 수있는 자세한 기사 링크입니다. 여기에서 최고의 답변을주는 모든 사람들에게 감사드립니다 !!

iOS의 가변 속성 속성 또는 수정 자

  1. 원자
    • 원자는 하나의 스레드 만 변수 (정적 유형)에 액세스하는 것을 의미합니다.
    • 원자는 스레드 안전합니다.
    • 그러나 성능이 느립니다.
    • 원자는 기본 동작입니다.
    • 비장 가비 수집 환경 (예 : Retain/Release/AutoreLease를 사용할 때)의 원자 액세서는 다른 스레드가 올바른 설정/값을 얻지 않도록 잠금을 사용합니다.
    • 실제로 키워드가 아닙니다.

예시 :

@property (retain) NSString *name;

@synthesize name;
  1. 비 원자
    • 비 원자는 다중 스레드가 변수 (동적 유형)에 액세스하는 것을 의미합니다.
    • 비 원자는 실 안전하지 않습니다.
    • 그러나 성능이 빠릅니다.
    • 비 원자는 기본 동작이 아닙니다. 속성 속성에 비 원자 키워드를 추가해야합니다.
    • 두 개의 다른 프로세스 (스레드)가 동시에 동일한 변수에 액세스 할 때 예기치 않은 동작이 발생할 수 있습니다.

예시:

@property (nonatomic, retain) NSString *name;

@synthesize name;

스레드 아파트에 대해 이미 언급 된 것 외에도 비 원자 특성은 원자 액세서보다 빠릅니다. 그것은 당신이 일반적으로 걱정해야 할 것이 아니라 염두에 두어야합니다. 핵심 데이터 생성 특성은 이러한 이유로 부분적으로 비 원자입니다.

멀티 스레드 프로그램에서는 원자 연산을 부분적으로 중단 할 수는 없지만 비 원자 작업은 할 수 있습니다.

따라서 중단을 원하지 않는 비 원자의 중요한 작업이있는 경우 Mutxes (또는 그와 비슷한)를 사용해야합니다.

"Atomic"을 지정하면 생성 된 액세스 함수에는 동시 업데이트에 대비할 수있는 추가 코드가 있습니다.

일반적으로 원자는 속성에 쓰기/읽기가 단일 작업으로 발생한다는 것을 의미합니다.atomic_operation

할 수 있습을 얻을 수 있는 핸들이 물건을 읽어서 아래 문서입니다.

실을 꿰는 설명으로 세분화의 목적

비 원자-지 않는 스레드를 안전

원자 스레드에 안전이 기본 제공 특성이 있습니다.

그만큼 "원자" 속성에 대한 액세스가 실로 안전하다는 것을 의미합니다. 동안 "비 원자" 그것의 반대입니다. 객체 C에서 속성을 선언 할 때 부동산은 기본적으로 원자가되어 합성 된 액세서가 멀티 스레드 환경에서 속성에 대한 강력한 액세스를 제공 할 수 있도록합니다. 다른 스레드가 동시에 실행되는 것. 그러나 속성을 아래와 같이 비 원자로 선언하는 경우

@property (nonatomic, retain)  NSString *myString;

그런 다음 객체 속성에 대한 합성 액세서가 단순히 값을 직접 반환한다는 것을 의미합니다. 비 원자 속성의 효과는 환경에 따라 다릅니다. 기본적으로 합성 된 액세서는 원자입니다. 따라서 비 원자는 원자보다 상당히 빠릅니다.

하나는 멀티 스레드를위한 것입니다. 하나는 아닙니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top