请帮助我了解如何实现一个objective-c单例



我对如何在objective-c中实现单例感到困惑。

我读了这篇关于stackoverflow的文章,并被显示为正确答案的代码所迷惑。

如何实现与ARC兼容的Objective-C单例?

这段代码来自上面的帖子链接。

+ (MyClass *)sharedInstance
{
    static MyClass *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[MyClass alloc] init];
        // Do any other initialisation stuff here
    });
    return sharedInstance;
}

我不明白的是下面这一行。

    static MyClass *sharedInstance = nil;

为什么它需要分配"nil"静态变量的方法?如果这一行位于sharedInstance方法的顶部,则每次调用它时,静态变量变为nil。而且因为"despatch_once"只被调用一次,我认为这个方法总是在这个方法被调用一次后返回nil。

谁能帮我理解这个东西是怎么工作的?

该方法的第一行在第二次调用后也被忽略吗?

任何类中的静态变量只能创建一次,并且在同一类的所有实例之间共享

但是静态变量还有另一种用法,那就是在函数中使用静态变量,这就是您的例子。函数内部的静态变量是在后续调用中保留其值的变量。
- (int)addOne
{
    static int i;
    i++;
    return i;
}

在这里,即使i是一个局部变量,i也会保留之前调用时的值。但是如何初始化这样一个变量呢?你可以这样做

static int i=10;

初始化只在函数第一次调用时执行,在以后的调用中跳过。

最新更新