【发布时间】:2019-12-05 06:33:13
【问题描述】:
我在Objective-C 有一个单例类。在访问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;
}
【问题讨论】:
-
共享对象在
sharedInstance方法中被初始化。所以在你调用这个方法之前,答案是否定的。如果你想有一个方法来检查,创建另一个类方法来检查sharedInstance。 -
一种方法是添加一个静态布尔值,最初为
NO。在sharedInstance中将其设置为YES。您无法检查sharedInstance中的nil,因为对sharedInstance的任何引用都会导致它被初始化。 -
您可以检查
onceToken的值,但也可以使用类布尔值。
标签: ios objective-c oop design-patterns singleton