Programing

“Nonatomic”속성은 무엇을 의미합니까?

lottogame 2020. 6. 18. 07:53
반응형

“Nonatomic”속성은 무엇을 의미합니까?


이 코드에서 "비 원자"는 무엇을 의미합니까?

@property(nonatomic, retain) UITextField *theUsersName;

원자와 비원 자의 차이점은 무엇입니까?

감사


Apple Docs를 살펴보십시오 .

기본적으로이라고 nonatomic말하고을 사용하여 접근 @synthesize자를 생성 하면 여러 스레드가 속성을 한 번에 변경 / 읽으려고하면 불량이 발생할 수 있습니다. 부분적으로 작성된 값 또는 초과 릴리스 / 보존 된 오브젝트를 가져 오면 쉽게 충돌 할 수 있습니다. (그러나 이것은 원자 접근 자보다 훨씬 빠릅니다.)

기본값을 사용하는 경우 ( atomic; 키워드는 없었지만 현재 는 있음 ) @synthesized 메소드는 객체 레벨 잠금을 사용하여 단일 특성에 대한 여러 읽기 / 쓰기가 직렬화되도록합니다. Apple 문서에서 지적했듯이 이것이 전체 객체가 스레드로부터 안전하다는 것을 의미하지는 않지만 개별 속성 읽기 / 쓰기는 가능합니다.

물론을 사용하지 않고 자신의 접근 @synthesize자를 구현하는 경우 이러한 선언은 속성이 스레드 안전 방식으로 구현되는지 여부에 대한 의도를 표현하는 것 외에는 아무것도하지 않는다고 생각합니다.


많은 기사와 StackOverflow 게시물을 읽은 후 변수 속성 속성을 확인하기 위해 데모 앱을 만든 후 모든 속성 정보를 하나로 묶기로 결정했습니다.

  1. 원자 // 기본
  2. 비 원자
  3. strong = 보유 // 기본
  4. 약한 = unsafe_unretained
  5. 유지
  6. // 디폴트 할당
  7. unsafe_unretained
  8. 읽기 전용
  9. readwrite // 기본

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

iOS의 변수 속성 또는 수정 자

  1. 원자
    • 원자는 하나의 스레드 만 변수 (정적 유형)에 액세스 함을 의미합니다.
    • 원자는 스레드 안전합니다.
    • 그러나 성능이 느립니다.
    • 원자가 기본 동작입니다.
    • 가비지 수집되지 않은 환경 (예 : retain / release / autorelease를 사용하는 경우)의 원자 접근자는 다른 스레드가 올바른 값 설정 / 가져 오기를 방해하지 않도록 잠금을 사용합니다.
    • 실제로는 키워드가 아닙니다.

예 :

@property (retain) NSString *name;

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

예:

@property (nonatomic, retain) NSString *name;

@synthesize name;

스레드 안전성에 대해 이미 언급 한 것 외에도 원자 이외의 속성은 원자 접근 자보다 빠릅니다. 일반적으로 걱정할 필요는 없지만 명심하십시오. 이러한 이유로 Core Data 생성 속성은 부분적으로 비원 자적입니다.


다중 스레드 프로그램에서 원자 작업은 부분적으로 중단 될 수 없지만 비 원자 작업은 중단 될 수 있습니다.

따라서 방해를받지 않는 비 원자적인 중요한 작업이있는 경우 뮤텍스 (또는 이와 유사한 것)를 사용해야합니다.


"atomic"을 지정하면 생성 된 액세스 기능에 동시 업데이트를 방지하기위한 추가 코드가 있습니다.


일반적으로 원 자성이란 속성에 대한 쓰기 / 읽기가 단일 작업으로 발생 함을 의미합니다. 원자력 운영


아래 기사를 읽으면이 물건을 다룰 수 있습니다.

스레딩 비원 자의 목적으로 설명

비 원자-스레드 안전 아님

atomic-스레드 안전-기본 속성 속성입니다.


The "atomic” means that access to the property is thread-safe. while the "nonatomic" is the opposite of it. When you declare a property in Objective-C the property are atomic by default so that synthesized accessors provide robust access to property in a multithreaded environment—that is, the value returned from the getter or set via the setter is always fully retrieved or set regardless of what other threads are executing concurrently. But if you declare property as nonatomic like below

@property (nonatomic, retain)  NSString *myString;

then it means a synthesized accessor for an object property simply returns the value directly. The effect of the nonatomic attribute depends on the environment. By default, synthesized accessors are atomic. So nonatomic is considerably faster than atomic.


One is for multi threads. One isnt

참고URL : https://stackoverflow.com/questions/821692/what-does-the-property-nonatomic-mean

반응형