我正在使用常见的单例模式如下:
+ (SomeClass *)sharedInstance {
static SomeClass *__sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
__sharedInstance = [[SomeClass alloc] init];
});
return __sharedInstance;
}
我知道SomeClass对象在第一次调用[SomeClass sharedInstance]时会被实例化,但是, SomeClass什么时候被dealloc'd?
这是在ARC下,所以编译器何时释放SomeClass静态对象?是否保证在我的应用程序的剩余生命周期内出现?
答案 0 :(得分:6)
由于__sharedInstance
的声明在sharedInstance
范围内,因此无法通过任何其他方法直接访问它。这意味着没有其他人可以将其设置为nil
,因此会一直保留到您的应用终止为止。
还值得一提的是,当系统在终止时释放内存时,您无法确定单个人的dealloc
方法是否会被调用,主要是因为:
dealloc
方法。dealloc
方法,那么在终止时(例如您使用的框架)无法预测对象破坏的顺序,从而使您的代码不可靠。