2010-08-12 7 views
2

필자는 펜촉 파일에서 초기화 된 객체를 가지고 있습니다. 싱글 톤이 되길 원하지만 코드에서 [myClass sharedInstance];까지 액세스 할 수 있기를 바랍니다. 지금 당장 가지고 있습니다.펜촉에서 시작된 싱글 톤 객체 호출

static myClass *singleton = nil; 

@implementation myClass 
+ (myClass *)sharedInstance 
{ 
    if (!singleton) singleton = [[self class] new]; 
    return singleton; 
} 

+ (id)alloc 
{ 
    return [self sharedInstance]; 
} 

- (id)init 
{ 
    if ([self class] != nil) 
     self = [super init]) 
    return self; 
} 
@end 

그러나 alloc은 결코 호출되지 않습니다.

+0

'alloc' 메서드가 호출되지 않는 이유는 모르겠지만 (어쨌든'allocWithZone :'을 오버라이드해야 할 수도 있습니다), 어쨌든 문제가되지는 않을까요? 'alloc'이'sharedInstance'를 호출 할 때, 그것은'alloc'에 대한 또 다른 호출을 초래하게 될 것입니다, 그리고 무한히 계속됩니다. – David

+0

실제로 allocWithZone이 필요해 보입니다 : 무한 루프가 있습니다. – Jane

+0

무한 루프를 해결하려면 싱글 톤이 생성되는 과정에 있는지 여부를 나타내는 플래그 변수가 있어야합니다. 'sharedInstance'는 그것을 설정할 것이고,'alloc'는 그것을 체크 할 것입니다. 이것이 설정 되었다면,'alloc'은'[super alloc]'을 호출 할 것입니다. – David

답변