싱글톤 인스턴스는 객체의 인스턴스가 오직 하나만 존재하는것을 보장하도록 코딩하는것을 말한다.
자바에서는 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 에 의해 해제되지 않는다.
결국 하나의 인스턴스를 보장한다.

by cranix 2010. 11. 30. 18:37
| 1 |