2021년 2월 24일 수요일

[iOS] @synchronized 배타 제어 (객체 동시접근 방지)

참고: 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); 

이렇게도 쓰라고함

Related Posts:

  • [ios] object-c 로 framework만들기 Object-c 로 framework만들기ios8 부터는 framework형태로 라이브러리 제작이 가능하다. 이를 cocoapod등에 올리면 cocoapod install명령으로 간단하게 누구나 사용할수있는 라이브리를 만들수 있다.1. 일단 file-> new -> workspace 를  만든다. (MY_IOS_FRAMEWORK폴더로 만들고, my_ios_framewor… Read More
  • Unity3d 에서 네이티브 IOS 코드 불러내서 사용하기-심플 참고사이트:https://twnkls.com/en/blogs/howto-native-android-plugins-for-unity3d-2/한번보면 알게되는 강좌 :https://www.youtube.com/watch?v=zP5mjHzJR-o (Creating an iOS Plugin for Unity3D)1.일단 유니티 프로젝트를 생성한다.2.Assets 목록에 - Plugins&… Read More
  • [iOS] @synchronized 배타 제어 (객체 동시접근 방지)참고: https://dolfalf.tistory.com/145https://aroundck.tistory.com/4705가장간단한건  // self를 키로 락을 검. 어디선가 self로 락을 건경우 락이 해제될 때까지 여기서 기다리게됨.@synchronized (self) {  [_mutableItems addObject:object];}보통 이런식으로도 씀.@i… Read More

0 comments:

댓글 쓰기