如果dispatch_once包围的初始化失败怎么办?

时间:2014-09-14 05:02:31

标签: objective-c grand-central-dispatch

提供Objective-C类的共享实例的标准方法是:

+ (instancetype)sharedInstance {
    static MyClass shared;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        shared = [MyClass new];
    });
    return shared;
}

但是如果初始化失败并返回nil怎么办?它永远是nil吗?不应该在某处进行nil测试,然后在需要时以某种方式重置onceToken

2 个答案:

答案 0 :(得分:3)

重置onceToken不是一种选择。该块应采取必要的步骤,以确保在返回时初始化成功。

答案 1 :(得分:0)

您正在创建一个单身人士。如果你不能创建单身,那你就有一个严重的问题。如果这只是一个假设的问题,请忽略它。如果你的alloc / init可以返回nil,并且它返回nil,你可以做什么,除了把戒指扔进戒指并告诉你的应用程序自杀?您认为以后可能成功的任何理由?