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];

someemethod永远不会被调用。我试着用调试器进入那行,一旦它到达dispatch_once行,它就继续执行(即。它把我踢出了调试器——所以也许线程死了?)

有什么建议吗?

尝试切换

dispatch_once_t onceToken;

static dispatch_once_t onceToken;

最新更新