我遵循了一个教程来实现 Singleton 并且它工作正常。下面是代码:
@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 是一个静态变量,那么它如何在即时方法中工作 在里面 。请帮助我理解。
最佳答案
静态变量是存储在所谓的“静态”存储器中的变量,该存储器在应用程序启动时分配并在应用程序的生命周期内存在。在 objective-c 中,它们不是类的一部分,但它们的可访问性仅限于定义变量的位置。此外,它们与实例变量的不同之处在于整个应用程序只有一个实例,而不是每个创建的对象一个。
通常,在 Objective-C 中定义单例模式的更好方法是这样的:
+ (instancetype)dKSingleInstance {
static DKSingle* dKSingle;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
dKSingle = [[DKSingle alloc]init];
});
return dKSingle;
}
这使得静态变量的范围仅限于一个方法。此外,通过使用 dispatch_once
,您可以为初始化静态变量提供一些线程安全性。
关于ios - 静态变量如何在实例方法中工作 - 单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308699/