+ (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
(출처의 코드와 큰 차이는 없지만, 내가 주로 쓰는 심볼 스타일로 바꿔버렸음. -_-)
0 comments:
댓글 쓰기