2009-05-08 2 views
1

NSOperation을 사용하는 스레드 된 환경에서 작업하는 중임이 여전히 남아 있으며 NSOperation을 서브 클래 싱하는 경우 nonatomic 속성을 사용하면 가치가 있는지 이해하고 싶습니다.NSOperation 객체 (스레드 환경)의 비 원자 속성, 언제 사용합니까?

defaultQueue이 1로 설정된 경우, 비 원자 값의 추가 오버 헤드가 있습니까? 작업 대기열 당 스레드가 두 개 이상 실행되는 경우 필요할 수 있습니다.

스레드 환경에서이 속성을보다 잘 이해하는 솔루션을 제공해 주셔서 감사합니다.

답변

4

동시에 여러 스레드에서 액세스 할 수없는 개체 (또는 해당 개체의 속성)가있는 경우 비 원자를 사용하여 해당 속성에 대한 원자 적 액세스의 잠재적 오버 헤드를 피할 수 있습니다. 작업을 생성하고 NSOperationQueue에 대기열을 넣는 가장 간단한 경우 각 NSOperation 인스턴스는 호출하는 스레드에서 설정되거나 단일 백그라운드 스레드에서 실행됩니다. 그래서 언제든지 하나의 스레드 만 액세스해야합니다.

nonatomic이 유용한 경우의 더 일반적인 질문은 부분적으로 가비지 수집 사용 여부에 따라 달라집니다. Objective-C 릴리스 노트에 따르면 :

속성에 대한 액세스는 기본적으로 기본적입니다. 이것은 거의 모든 것에서 GC 아래에서 사소한 것이지만 사물과 구조를 제외한 모든 것에 대해서도 non-GC 아래에서 사소한 것입니다. 특히 non-GC 조건에서 유지 된 오브젝트에 대한 원자 적 액세스는 비용이 많이들 수 있습니다. 따라서 비 원자 속성 특성을 사용할 수 있습니다.