참고: https://dolfalf.tistory.com/145
https://aroundck.tistory.com/4705
가장간단한건
// self를 키로 락을 검. 어디선가 self로 락을 건경우 락이 해제될 때까지 여기서 기다리게됨.
@synchronized (self) {
[_mutableItems addObject:object];
}
보통 이런식으로도 씀.
@implementation MyClass
{
// 잠금시 키로 지정하는 인스턴스를 저장할 위치를 제공합니다.
NSObject * _objectForLock;
}
이것을 init 메소드 등의 어딘가 적절한 위치로 초기화합니다.
- (id) init
{
self = [super init];
if (self)
{
// 잠금시 키로 지정하는 인스턴스를 준비합니다.
_objectForLock = [[NSObject alloc] init];
}
return self;
}
ARC 환경이라면 Objective-C 인스턴스는 필요하지 않을 때 출시되므로 뒤처리가 필요하지 않습니다.
ARC 환경이 아닌 경우는 -dealloc 메소드 등으로 잠금을 확보 한 인스턴스를 release하도록합니다.
@synchronized의 인수로 사용합니다.
@synchronized (_objectForLock)
{
}
Effective Object-C 에서는
_syncQueue = dispatch_queue_create("com.effectiveobjectivec.syncQueue", NULL);
이렇게도 쓰라고함
0 comments:
댓글 쓰기