我按照教程实现了Singleton及其正常工作.Below是代码:
@implementation DKSingle
static DKSingle *dKSingle = nil;
+(id)dKSingleInstance{
if (!dKSingle) {
dKSingle = [[DKSingle alloc]init];
}
return dKSingle;
}
-(id)init{
if (!dKSingle) {
dKSingle = [super init];
}
return dKSingle;
}
@end
我的问题是dKSingle是一个静态变量,那么它如何在即时方法中起作用 在里面 。请帮我理解。
答案 0 :(得分:3)
静态变量是存储在所谓的“静态”存储中的变量,该存储在应用程序启动时分配,并在应用程序的生命周期内存在。在目标c中,它们不是类的一部分,但它们的可访问性限定在定义变量的位置。此外,它们与实例变量的不同之处在于,整个应用程序只有一个实例,而不是每个对象创建一个实例。
通常,在Objective-C中定义单例模式的更好方法是这样的:
+ (instancetype)dKSingleInstance {
static DKSingle* dKSingle;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
dKSingle = [[DKSingle alloc]init];
});
return dKSingle;
}
这使得静态变量仅限于一个方法。此外,通过使用dispatch_once
,您可以为初始化静态变量提供一些线程安全性。