2011년 4월 12일 화요일

[iOS] Objective-C Singletone Pattern

일단 Objective-C 스타일의 싱글톤 패턴 예제 코드. (definition은 생략)
+ (MySingletone *)getInstance {
  static MySingletone *instance = nil;
 
  if (!instance)
    instance = [[MySingletone alloc] init];

  return instance;
}
설명도 할 필요 없이 C++에서 자주 쓰이는 싱글톤의 팩토리얼 패턴이다. (싱글톤은 팩토리얼이 거의 전부라고 봐도 될 아이러니함 -ㅁ-)

하지만 애플에서는 이렇게 쓰지 말라고 하네. thread safe 하지 않다나 뭐라나.

아이폰이나 아이패드용, 즉 Cocoa 기반이라면 dispatch_once() 를 사용하랜다.
+ (MySingletone *)getInstance {
  static dispatch_once_t dispatchOnce;
  static MySingletone *instance = nil;
 
  dispatch_once(&dispatchOnce, ^{
    instance = [[MySingletone alloc] init];
  });

  return instance;
}
딱 보니 최초 생성 시점(팩토리얼이 실행되었냐 여부)를 dispatch_once가 대신 파악해 주는 형식이다. 불행히도 내가 싫어하는 블럭 문법이 등장했으나 뭐 나쁘지는 않은 듯.

출처: http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong.html

(출처의 코드와 큰 차이는 없지만, 내가 주로 쓰는 심볼 스타일로 바꿔버렸음. -_-)

댓글 없음 :