Objective-C에서는 원자 속성과 비 원자 속성을 구분합니다.
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
내 이해에 따르면 여러 스레드에서 원자로 정의 된 속성을 안전하게 읽고 쓸 수 있지만 동시에 여러 스레드에서 비 원자 속성 또는 ivar를 작성하고 액세스하면 잘못된 액세스 오류를 포함하여 정의되지 않은 동작이 발생할 수 있습니다.
따라서 Swift에 다음과 같은 변수가있는 경우 :
var object: NSObject
이 변수를 안전하게 읽고 쓸 수 있습니까? (이 작업의 실제 의미를 고려하지 않고).
atomic
간단한 데이터 유형을 제외하고 일반적으로 속성과 스레드로부터 안전한 상호 작용에 충분하지 않은 것으로 간주됩니다. 객체의 경우 일반적으로 잠금 (예 : NSLock
또는 @synchronized
) 또는 GCD 큐 (예 : 직렬 큐 또는 "reader-writer"패턴을 사용하는 동시 큐)를 사용하여 스레드간에 액세스를 동기화합니다 .
atomic
는 객체에 대한 스레드 안전성을 보장하지 않습니다. (b) 스레드 안전성을 보장하기 위해 앞서 언급 한 동기화 기술 중 하나를 적절하게 사용하는 경우 (무엇보다도 동시 읽기 / 쓰기 방지) 원자 적 문제는 논쟁의 여지가 있습니다. 그러나 우리 atomic
는 실제 가치가 있는 단순한 데이터 유형을 위해 여전히 필요 / 원합니다 . 좋은 질문!
@atomic
또는@nonatomic
. 또는 기본적으로 원 자성입니다. (Swift는 너무 불완전합니다. 지금은 많이 알 수 없습니다.)