崩溃在dispatch_once(onceToken,^ {

崩溃在dispatch_once(onceToken,^ {

问题描述:

+(Service *) sharedInstance 
{ 
    static LocationService *instance = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{    <<<< Crash 
     instance = [[self alloc]init]; 
    }); 
    return instance; 
} 

我现在用的是上面显示的代码在我的应用程序来创建服务的单一实例这是从所谓的“:willFinishLaunchingWithOptions:AppDelegate中的应用”崩溃在dispatch_once(onceToken,^ {

对于大多数。对用户来说,这代码工作正常,但2级的用户,应用程序崩溃,在“dispatch_once(& onceToken,^ {”行。

他们删除的应用程序,并重新安装了它,但他们仍然可以看到这个问题。只有这两个用户面临这个问题,其他人从来没有见过,我有.dsym,.crash和其他相关文件进行进一步的调试。我想知道我应该怎么处理它?如果有人看到类似的问题,他们是如何着手修复它的?

+0

http://*.com/questions/13626513/dispatch-once-call-causes-crash – StefanS

+0

http://*.com/questions/7570528/ios-singleton-class-crashes-my-应用 – StefanS

+0

尝试从静态LocationService *实例声明中删除'= nil'定义。我认为声明为静态的变量默认初始化为0。 – DDP

不要使用自我。因为在创建课程之前,自我并不可用。相反,您可以按如下所示使用类名称。

+(Service *) sharedInstance 
{ 
static LocationService *instance = nil; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{    
    instance = [[Service alloc]init]; 
}); 
return instance; 
} 
+2

这是错误的。在类方法中,'self'是指类。 –

+0

感谢@andey的回答 –