gpt4 book ai didi

objective-c - 保留您访问过的单例有什么意义?

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

在单例上使用 retain 有什么意义吗?我相信使用单例模式的全部目的是保持一个全局对象可以从不同的类访问。在这样的对象上使用 retain 会是什么情况?

通常,单例类中 retain 的实现会返回 self (不是单例实例),如下所示:

-(id)retain
{
return self;
}

最近翻了一些开源代码,作者反复保留了单例

object = [[SingletonClass shareObject] retain]

并在dealloc中释放它。

因此,当我尝试构建这个项目时,它首先工作,然后在稍后尝试访问单例对象上的变量时崩溃。

如果我保留一个单例对象并尝试访问它,到底会发生什么?

最佳答案

仅仅因为它是单例并不意味着它的生命周期一定是进程的生命周期。例如,您可能有一些获取资源的单例。但在您需要该资源之前,创建它是没有意义的。同样,您可能知道所有实例都是使用该资源完成的,那么为什么要保留它呢?跟踪单例是否需要继续存在的一个简单方法是其保留计数。

例如,您可能有一个代表用户设备内置摄像机的单例。您的应用程序的不同部分可能需要访问相机。但也可以在没有相机的情况下使用您的应用程序,或者工作流程可能会要求相机在某个时刻关闭(出于隐私或其他原因)。因此,在用户启动开始使用相机的操作之前,您不会分配单例。他们可能会使用相机执行多项操作,例如拍照、扫描二维码、录制视频等。然后他们可能会结束所有这些操作并需要释放相机占用的内存(尤其是在移动设备上) )。所以他们结束了这些行动。如果每个与相机相关的操作都保留相机单例,然后每个操作完成后都将其释放,那么您可以释放相机使用的内存和其他资源,即使它仍然是单例。

关于objective-c - 保留您访问过的单例有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18863992/

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