source

"비원자"라는 성질이 무슨 뜻이죠?

factcode 2023. 4. 14. 22:12
반응형

"비원자"라는 성질이 무슨 뜻이죠?

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

@property(nonatomic, retain) UITextField *theUsersName;

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

감사해요.

Apple Docs 를 봐 주세요.

기본적으로, 당신이 말한다면nonatomic를 사용하여 @synthesize여러 스레드가 동시에 속성을 변경/읽으려고 하면 불량 상태가 발생할 수 있습니다.부분적으로 기입된 값이나 오버 릴리스/보존된 오브젝트를 취득할 수 있기 때문에 크래시가 발생하기 쉽습니다(단, 이것은 잠재적으로 아토믹액세서보다 훨씬 고속입니다).

를,atomic이전에는 키워드가 없었지만, 현재는 있습니다.)@synthesized 메서드는 객체 수준의 잠금을 사용하여 단일 속성에 대한 여러 읽기/쓰기가 직렬화되도록 합니다.Apple 문서들이 지적했듯이, 이것은 전체 개체가 스레드 안전하다는 것을 의미하지는 않지만, 개별 속성 읽기/쓰기는 안전하다는을 의미합니다.

「 」, 「 」, 「 」, 「 」를 사용하는 것이 , 인 액세스 를 실장하는 는,@synthesize이러한 선언은 자산이 스레드 세이프 방식으로 구현되어 있는지 여부에 대한 귀하의 의도를 표현하는 것 외에는 아무 것도 하지 않는다고 생각합니다.

기사나 StackOverflow의 투고를 많이 읽고, Variable 속성 확인을 위한 데모 앱을 만든 후, 속성 정보를 모두 정리하기로 했습니다.

  1. //아토믹 디폴트
  2. 원자 이외의
  3. strong=default //기본값
  4. weak= 안전하지 않음_유지되지 않음
  5. 유지하다
  6. 할당 //기본값
  7. 안전하지 않다
  8. 알았다.
  9. 읽기 전용
  10. readwrite //기본값

위의 모든 속성을 확인할 수 있는 상세한 기사 링크를 아래에 제시하면 도움이 됩니다.가장 좋은 답변을 해주신 모든 분들께 감사드립니다!!

iOS에서 변수 속성 또는 수정자

  1. 원자핵의
    • Atomic은 변수에 액세스하는 스레드는 1개뿐임을 의미합니다(정적 유형).
    • 아토믹은 스레드 세이프입니다.
    • 하지만 성능이 느리다.
    • Atomic은 기본 동작입니다.
    • 가비지 수집되지 않은 환경(즉, 유지/해제/자동 리스를 사용하는 경우)의 아토믹액세서는 잠금을 사용하여 다른 스레드가 값의 올바른 설정/취득을 방해하지 않도록 합니다.
    • 실제로는 키워드가 아닙니다.

예:

@property (retain) NSString *name;

@synthesize name;
  1. 원자 이외의
    • Nonatomic은 변수(동적 유형)에 대한 여러 스레드의 액세스를 의미합니다.
    • 비원자적인 것은 안전하지 않다.
    • 하지만 성능이 빠릅니다.
    • Nonatomic은 기본 동작이 아닙니다.속성 속성에 nonatomic 키워드를 추가해야 합니다.
    • 2개의 다른 프로세스(프로세스)가 같은 변수에 동시에 액세스 하면 예기치 않은 동작이 발생할 수 있습니다.

예:

@property (nonatomic, retain) NSString *name;

@synthesize name;

스레드 세이프성에 대해 이미 언급되어 있는 것 외에, 비원자적인 속성은 원자적인 액세스 장치보다 더 빠릅니다.평소에는 신경 쓸 일이 아니지만 명심하세요.이러한 이유로 인해 코어 데이터가 생성된 속성은 부분적으로 비원자적입니다.

멀티 스레드 프로그램에서 원자 연산은 부분적으로 중단될 수 없는 반면, 비원자 연산은 중단될 수 있다.

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

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

일반적으로 atomic은 속성에 대한 쓰기/읽기가 단일 작업으로 발생하는 것을 의미합니다.Atomic_operation

아래 기사를 읽으시면 이 문제를 해결할 수 있습니다.

스레드화 비원자의 목적을 가지고 설명

nonatomic - 스레드 세이프 아님

atomic - Thread Safe - 기본 속성 속성입니다.

"원자성"은 속성에 대한 액세스가 스레드 세이프함을 의미합니다.반면 "비원자"는 그 반대입니다.Objective-C에서 속성을 선언하면 속성은 기본적으로 atomic이 됩니다.따라서 합성 접근자는 멀티스레드 환경에서 속성에 대한 견고한 액세스를 제공합니다.즉, getter 또는 setter를 통해 반환되는 값은 동시에 실행되는 다른 스레드에 관계없이 항상 완전히 취득 또는 설정됩니다.하지만 당신이 아래와 같이 비원자성이라고 선언한다면

@property (nonatomic, retain)  NSString *myString;

즉, 객체 속성에 대한 합성 접근자가 단순히 직접 값을 반환한다는 것을 의미합니다.비원자 속성의 효과는 환경에 따라 달라집니다.디폴트로는 합성접근자는 아토믹입니다.그래서 비원자가 원자보다 훨씬 더 빠릅니다.

하나는 멀티 스레드용입니다.하나는 아니다

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

반응형