2012-02-15 2 views
0

NSLocks를 사용하는 대신에 @ synchronized-construct를 좋아합니다. 한 번에 한 스레드 만 데이터 구조를 읽거나 쓰길 원합니다. 그러나 @synchronized가 전체 객체를 변경하려는 경우 @synchronized가 적합한 지 확실하지 않습니다.Objective-C @synchronized object changes

// version 1: 

// segment 1: 
@synchronized(self.obj) { 
    self.obj = obj2; 
} 
// segment 2: 
@synchronized(self.obj) { 
    // some other stuff 
} 

// version 2: 
// segment 1: 
[objLock lock]; 
self.obj = obj2; 
[objLock unlock]; 
// segment 2: 
[objLock lock]; 
// some other stuff 
[objLock unlock]; 
+0

[@synchronized 부 insde 로킹 개체 변경]의 중복 가능성 (http://stackoverflow.com/questions/1215765/changing-the-locking-object-insde - 동기화 섹션) – kennytm

답변

0
NSLock

@synchronized 전화는 기본적으로 같은 일을하고, 거의 교환 할 수있다 : 내가 알고 싶은 것은, 이들이 같은 방식으로 작동 여부입니다. 약간의 사소한 차이점이 있습니다.이 간단한 구현에 대해서는 신경 쓰지 않아도되지만 재미있는 부분이기 때문에 읽어보십시오.

있어 좋은 SO 두 가지를 비교합니다 여기에 대답 : How does @synchronized lock/unlock in Objective-C?

1

이 대신 당신이 nonatomic없이 속성을 설정할 수 있습니다. nonatomic의 부재는 의미는 atomic입니다. 합성 접근에 관계없이 어떤 다른 스레드의 다중 스레드 환경 즉, 세터을 통해 게터에서 반환하거나 설정 값은 항상 완전히 검색됩니다되어있는 속성에 대한 강력한 액세스를 제공하거나 설정할 수 있도록

속성은 기본적으로 원자이다 동시에 실행됩니다. 더 많은 정보

참조 Apple documentation