Singleton实例自动解除分配的可能性

dev*_* gr 5 singleton objective-c ios

我正在创建单例实例,如下所示:

+(MySingleton*)sharedInstance  {    
      static MySingleton sharedObject = nil;

      static dispatch_once_t predicate = 0;

    dispatch_once(&predicate, ^{
         sharedObject = [[MySingleton alloc] init];
    });
    return sharedObject;  
}
Run Code Online (Sandbox Code Playgroud)

sharedObject自动解除分配的可能性有哪些?

sharedObject在应用程序终止之前,我怎么能确定它会保留在内存中?

rav*_*ron 12

正如另一个答案正确指出的那样,这个共享的单身人士永远不会被解除分配.回答"为什么"有两个部分,两者都来自以下几行:

static MySingleton * sharedObject = nil;
Run Code Online (Sandbox Code Playgroud)

首先,static.static当在这样的函数内部使用时,修改变量的生命周期,将其从automatic隐式默认值更改为static.这意味着该变量存在于程序的整个生命周期中.

其次,这个声明使sharedObject成为一个强大的参考.Objective-C中的变量默认很强,但是为了迂腐,你可以写:

static __strong MySingleton * sharedObject = nil;
Run Code Online (Sandbox Code Playgroud)

所以:我们有一个变量,它在程序的整个持续时间内都存在(static),并保持对它所代表的对象的强引用(__strong).有了这两条信息,再加上你永远不会改变变量所指向的对象这一事实,你可以推断出sharedObject永远不会被释放的信息.