이 코드에서 "비 원자"는 무엇을 의미합니까?
@property(nonatomic, retain) UITextField *theUsersName;
원자와 비원 자의 차이점은 무엇입니까?
감사
이 코드에서 "비 원자"는 무엇을 의미합니까?
@property(nonatomic, retain) UITextField *theUsersName;
원자와 비원 자의 차이점은 무엇입니까?
감사
답변:
Apple Docs를 살펴보십시오 .
기본적으로이라고 nonatomic
말하고을 사용하여 접근 @synthesize
자를 생성 하면 여러 스레드가 속성을 한 번에 변경 / 읽으려고하면 불량이 발생할 수 있습니다. 부분적으로 작성된 값 또는 초과 릴리스 / 보존 된 오브젝트를 가져 오면 쉽게 충돌 할 수 있습니다. (그러나 이것은 원자 접근 자보다 훨씬 빠릅니다.)
기본값을 사용하는 경우 ( atomic
; 키워드는 없었지만 현재 는 있음 ) @synthesize
d 메소드는 객체 레벨 잠금을 사용하여 단일 특성에 대한 여러 읽기 / 쓰기가 직렬화되도록합니다. Apple 문서가 지적했듯이, 이것이 전체 객체가 스레드로부터 안전하다는 것을 의미하지는 않지만 개별 속성 읽기 / 쓰기는 있습니다.
물론을 사용하지 않고 자신의 접근 @synthesize
자를 구현하는 경우 이러한 선언은 속성이 스레드 안전 방식으로 구현되는지 여부에 대한 의도를 표현하는 것 외에는 아무것도하지 않는다고 생각합니다.
atomic
개별 속성에 액세스하는 동안 충돌을 피하지만 개체 전체 (예 : 성과 이름과 같은 별도의 속성에 액세스)가 수행되도록 보장 하지는 않습니다 옳은 일.
많은 기사와 StackOverflow 게시물을 읽은 후 변수 속성 속성을 확인하기 위해 데모 앱을 만든 후 모든 속성 정보를 하나로 묶기로 결정했습니다.
아래는 위에서 언급 한 모든 속성을 찾을 수있는 자세한 기사 링크입니다. 여기에 최고의 답변을 해주신 모든 분들께 감사드립니다 !!
예 :
@property (retain) NSString *name;
@synthesize name;
예:
@property (nonatomic, retain) NSString *name;
@synthesize name;
"원자" 재산에 대한 액세스 스레드 안전하다는 것을. 그동안 수단 "비 원자는" 그 반대입니다. 그 합성 접근이 재산에 대한 강력한 액세스 할 수 있도록 속성이 기본적으로 원자이다 오브젝티브 C의 속성을 선언 할 때 다중 스레드 환경에서, 즉 getter에서 반환되거나 setter를 통해 설정된 값은 다른 스레드가 동시에 실행중인 항목에 관계없이 항상 완전히 검색되거나 설정됩니다. 그러나 속성을 비 원자로 선언하면 아래와 같이
@property (nonatomic, retain) NSString *myString;
그러면 객체 속성에 대해 합성 된 접근자가 단순히 값을 직접 반환한다는 의미입니다. 비 원자 속성의 효과는 환경에 따라 다릅니다. 기본적으로 합성 된 접근자는 원자 적입니다. 따라서 비원자는 원자보다 훨씬 빠릅니다.