Ios 请帮助我理解如何实现objective-c单例

Ios 请帮助我理解如何实现objective-c单例,ios,objective-c,Ios,Objective C,我对如何在objective-c中实现单例感到困惑 我读了这篇关于stackoverflow的文章,对正确答案所显示的代码感到困惑 此代码来自我上面的帖子链接 + (MyClass *)sharedInstance { static MyClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance

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

我读了这篇关于stackoverflow的文章,对正确答案所显示的代码感到困惑

此代码来自我上面的帖子链接

+ (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。 因为“dispatch_once”只被调用一次,我认为这个方法在调用一次之后总是返回nil

有人能帮我理解这东西是怎么工作的吗


此方法的第一行是否在第二次调用后也被忽略?

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

但是静态变量还有另一种用法,那就是函数中的静态变量,这就是你的例子。函数中的静态变量是在后续调用中保留其值的变量

- (int)addOne
{
    static int i;
    i++;
    return i;
}
在这里,即使
i
是一个局部变量,
i
也会保留上一次调用的值。但是如何初始化这样一个变量??嗯,你是这样做的

static int i=10;

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

A
static
变量只初始化一次。它只被设置为
nil
一次,永远不会再设置。可能重复@rmaddy谢谢!这很有帮助!非常感谢你!!现在,我很清楚这一点!!此功能是Objective-C独有的吗?或者它也可以在C/C++中看到?(局部静态变量)这也在C/C中++
- (int)addOne
{
    static int i;
    i++;
    return i;
}