静态变量如何在实例方法 - Singleton中工作

时间:2014-06-19 14:10:34

标签: ios objective-c oop singleton

我按照教程实现了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是一个静态变量,那么它如何在即时方法中起作用 在里面 。请帮我理解。

1 个答案:

答案 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,您可以为初始化静态变量提供一些线程安全性。