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
永遠不會被調用。
我不知道爲什麼你的'alloc'方法沒有被調用(也許你也需要重寫'allocWithZone:'),但是這不會有問題嗎?當'alloc'調用'sharedInstance'時,這將導致另一次調用'alloc',等等無限次。 – David 2010-08-12 11:45:39
看起來我確實需要allocWithZone:並且我有一個無限循環。 – Jane 2010-08-12 11:50:17
要解決無限循環,可以有一個標誌變量,指示單例是否在創建過程中。 'sharedInstance'會設置它,'alloc'會檢查它。如果它被設置,'alloc'會調用'[super alloc]'。 – David 2010-08-12 12:13:16