2013-06-03 125 views
2

我遇到類似於this post的問題,但該答案對我無效。Singleton方法在iOS中停止代碼執行

我有我的應用程序單身,我用這種方式創建:

static POGalleryManager* defaultManager = nil; 

+(POGalleryManager*)defaultManager 
{ 
    if (!defaultManager) { 
     defaultManager = [[super allocWithZone:NULL] init]; 
    } 

    return defaultManager; 
} 

+(id)allocWithZone:(NSZone *)zone 
{ 
    return [self defaultManager]; 
} 

這是工作的罰款,所以我試圖弄巧和使用GCD線程安全,切換到這一點,這是應該是更好的:

+(POGalleryManager*)defaultManager 
{ 
    static POGalleryManager* __manager = nil; 
    dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     __manager = [[POGalleryManager alloc] init]; 
    }); 

    return __manager; 
} 

第一次被調用,一切都很好。第二次它被這樣調用:

[[POGalleryManager defaultManager] someMethod]; 

someMethod永遠不會被調用。我試着用調試器進入該行,一旦它進入dispatch_once行,它就會繼續執行(即它將我踢出調試器 - 所以也許線程死了?)。

對此有何建議?

回答

1

嘗試切換

dispatch_once_t onceToken; 

static dispatch_once_t onceToken; 
+0

謝謝。顯然,我是盲人。 – Shinigami