글
싱글톤 인스턴스는 객체의 인스턴스가 오직 하나만 존재하는것을 보장하도록 코딩하는것을 말한다.
자바에서는 private 생성자를 이용해서 만들면 되었지만 ObjectiveC 에서는 그게 불가능하기 때문에 아래와 같은 방법을 쓴다.
#import "TemperatureConverterBO.h"
static TemperatureConverterBO *instance = nil;
@implementation TemperatureConverterBO
+ (TemperatureConverterBO *)getInstance {
@synchronized(self) {
if (instance == nil) {
instance = [[TemperatureConverterBO alloc] init];
}
}
return instance;
}
+(id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (instance == nil) {
instance = [super allocWithZone:zone];
return instance;
}
}
return nil;
}
-(id)copyWithZone:(NSZone *)zone {
return self;
}
-(id)retain {
return self;
}
-(unsigned)retainCount {
return UINT_MAX;
}
-(void)release {
}
-(id)autorelease {
return self;
}
@end
이 방법은 alloc 을 불러도 한번 생성되었으면 더이상 생성되지 않는다.
그리고 retainCount 가 맥스값이 나가기때문에 GC 에 의해 해제되지 않는다.
결국 하나의 인스턴스를 보장한다.
RECENT COMMENT