gpt4 book ai didi

ios - ARC下sharedInstance模式的内存含义是什么?

转载 作者:行者123 更新时间:2023-12-01 17:41:32 24 4
gpt4 key购买 nike

我正在使用常见的单例模式,如下所示:

+ (SomeClass *)sharedInstance {
static SomeClass *__sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
__sharedInstance = [[SomeClass alloc] init];
});

return __sharedInstance;
}

我了解到,我第一次调用[SomeClass sharedInstance]时会实例化SomeClass对象,但是, 是SomeClass何时取消分配?

这是在ARC下的,因此编译器何时释放SomeClass静态对象?它可以保证在我的应用程序的整个生命周期中都存在吗?

最佳答案

由于__sharedInstance的声明在sharedInstance的范围内,因此无法通过任何其他方法直接访问它。这意味着没有其他人可以将其设置为nil,因此它将一直保留到您的应用终止。

还值得一提的是,当系统在终止时释放内存时,您不能确定单例的dealloc方法将被调用,主要是因为:

  • 操作系统本身可以处理进程的终止,而在此之前,Objective-C运行时不会调用dealloc方法。
  • 假设您确实获得了dealloc方法,那么您无法在终止(例如所使用的框架)时预测对象销毁的顺序,这会使您的代码不可靠。
  • 关于ios - ARC下sharedInstance模式的内存含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17668867/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com