Singleton类静态变量每次设置为nil

Alo*_*nha 2 shared objective-c grand-central-dispatch ios

我正在制作一个单身课程供我使用.我见过单例类的代码是这样的:

//First Example

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
     });
    return sharedMyManager;
 }


 //Second Example

static SingletonSample *sharedObject;

+ (SingletonSample*)sharedInstance {
    if (sharedObject == nil) {
        sharedObject = [[super allocWithZone:NULL] init];
    }
    return sharedObject;
}
Run Code Online (Sandbox Code Playgroud)

秒似乎很好,可以理解.但我很困惑在第一个例子中,每次将sharedMyManager设置为nil并且每次都有一个共享管理器的分配,我怀疑的是第一个例子将如何返回类的相同引用(Singleton).

谢谢.

Apu*_*urv 5

首先,当在函数中声明static时,它只被声明一次.所以,这条线

static MyManager *sharedMyManager = nil;
Run Code Online (Sandbox Code Playgroud)

第一次调用函数时,只执行一次.

在您使用的下一行中dispath_once,它将仅执行一次.所以创造sharedMyManager只会做一次.所以,这是创造单吨课程的完美方式.