如何检查Singleton是否已初始化?

问题描述 投票:0回答:1

我在Objective-C中有一个Singleton类。我想知道共享对象在访问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;
}
ios objective-c oop design-patterns singleton
1个回答
1
投票

我可以想到2种可能的方式:

第一种方法: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
© www.soinside.com 2019 - 2024. All rights reserved.