如何检查单例是否已经初始化?

How to check if a Singleton is already initialized?

我在 Objective-C 中有一个单身人士 class。在访问 sharedInstance 之前,我想知道共享对象是否已经初始化。我该怎么做?

+ (id)sharedInstance {
    static MyObject *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
- (id)init {
    if (self = [super init]) {}
    return self;
}

我可以想到两种可能的方法:

第一种方法:static MyObject *sharedInstance = nil;移到方法之外。它看起来像:

@implementation MyObject

static MyObject *sharedInstance = nil;

+ (id)sharedInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

+ (BOOL)isSharedInstanceInitialized {
    return sharedInatance != nil; 
}

- (id)init {
    if (self = [super init]) {}
    return self;
}

@end

第二种方法: 正如上面评论中所建议的那样,使用额外的 BOOL 静态值

@implementation MyObject

static BOOL isInitialized = NO;

+ (id)sharedInstance {
    static MyObject *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
        isInitialized = YES;
    });
    return sharedInstance;
}

+ (BOOL)isSharedInstanceInitialized {
    return isInitialized;
}

- (id)init {
    if (self = [super init]) {}
    return self;
}

@end