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永远不会被释放的信息.
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |