所以我有一個單身和我試着去了解這兩種實現之間的區別:功能我試圖運行我的代碼與他們兩個,他們都工作差異
但是,我注意到在第一個實現中沒有[self alloc]被調用,而是調用[super alloc]。我有點困惑。它似乎工作,但似乎有點不可思議所以我想知道是否有人能澄清
1路:
+(id)getSingleton
{
static dispatch_once_t pred;
dispatch_once(&pred, ^{
locMgrSingleton = [[super alloc] init];
});
return locMgrSingleton;
}
另一種方式
+(id)getSingleton
{
@synchronized(self)
{
if (locMgrSingleton == nil)
{
locMgrSingleton = [[self alloc]init];
NSLog(@"Created a new locMgrSingleton");
}
else
{
NSLog(@"locMgrSingleton exists");
}
}
return locMgrSingleton;
}
第一個應該使用'self alloc'。 – rmaddy 2013-02-14 21:46:07
您是在詢問關於同步機制的差異,還是'[self alloc]'和'[super alloc]'之間的區別?對於第二種情況,這可能會有所幫助:[用allocWithZone創建一個單例:](http://stackoverflow.com/q/11962913)(不管怎麼說,你已經重寫了'alloc')。 – 2013-02-14 21:46:49