为什么这个目标-c单身人士有效?

时间:2018-02-10 10:39:13

标签: objective-c singleton

我已经在网络教程中创建了像Objective-C这样的单例:

+(id) sharedInstance{
    static AdManager *manager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[self alloc] init];
    });
    return manager;
}

持有人被释放后,static AdManager *manager会被释放吗? 由于*manager是在方法范围而不是字段变量中定义的,它是否也会被释放?

那么对象将在何处被保留,以便下次我们调用sharedInstance时可以使用它?

1 个答案:

答案 0 :(得分:2)

在方法或函数中声明为static的变量具有全局生命周期,但只能在其声明方法/函数中按名称显示。

由于manager是一个强变量(默认情况下),它引用的任何对象都将由此变量拥有,直到程序终止或将不同的引用(或nil)分配给{{ 1}}。

HTH