在dispatch_once(&onceToken,^ {

Par*_*hah 5 crash xcode objective-c ios

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

我正在使用上面显示的代码在我的应用程序中创建服务的单例实例。这是从“ AppDelegate应用程序:willFinishLaunchingWithOptions:”中调用的。

对于大多数用户而言,此代码可以正常工作。但是对于2个用户,该应用程序在“ dispatch_once(&onceToken,^ {”行崩溃了。

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

And*_*ana -1

不要用自己。因为在类初始化之前 self 不可用。相反,您可以使用类名,如下所示。

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

  • 这是错误的。在类方法中,“self”指的是类。 (4认同)