나름 프로그래밍?/ Objective-C

Objective-C 에서의 Singleton

-Dong- 2010. 4. 17. 23:39
-- XCode 4.2 부터 ARC 가 추가되어 좋은건 써야 겠기에
     http://iphone.galloway.me.uk/iphone-sdktutorials/singleton-classes/ 참고



.m 에서는 아래 코드와 같이(TWEngine 을 자기 클래스 이름으로 ㅇ_ㅇ.)

.h 에서는 NSCopying 프로토콜 추가 해야 될듯(선언은 +(TWEngine*)sharedTWEngine 만)

static TWEngine *sharedTWEngineManager = nil;

+(TWEngine*)sharedTWEngine {
    @synchronized(self) {
        if (sharedTWEngineManager == nil)
            sharedTWEngineManager = [[self alloc] init];
    }
    return sharedTWEngineManager;
}

+(id)allocWithZone:(NSZone *)zone {
    @synchronized(self) {
        if (sharedTWEngineManager == nil) {
            sharedTWEngineManager = [super allocWithZone:zone];
            return sharedTWEngineManager;
        }
    }
    return nil;
}

-(id)copyWithZone:(NSZone *)zone {
    return self;
}

-(id)retain {
    return self;
}

-(unsigned)retainCount {
    return UINT_MAX;  //denotes an object that cannot be released
}

-(void)release {
    //do nothing
}

-(id)autorelease {
    return self;
}

사용할땐 TWEngine *myEngine = [TWEngine sharedTWEngine];

참고 :
http://blog.hyperjeff.net/code?id=43
http://projectcocoa.com/2009/10/26/objective-c-singleton-class-template/