访问单例方法 (ARC) 时的 iOS 内存管理



假设我们有一个名为 SingletonClass 的 Singleton 类。我们可以通过以下方式访问它

[SingletonClass SharedInstance]

现在,当我们在任何其他类中通过执行以下操作来访问其方法时,例如 ClassOther

__weak singletonObj = [SingletonClass SharedInstance];
[singletonObj methodA];

所以 singletonObj 弱链接并在 ClassOther 的对象发布时正确释放。

但如果我尝试

[SingletonClass SharedInstance] methodA];

当 ClassOther 被释放时,它会释放所有腐蚀到 SingletonClass 的东西吗?即它是否循环并且当我们访问 SingletonClass 并且它没有弱链接时没有释放 ClassOther?

假设 SingletonClass 的 SharedInstance

方法实际上是单例模式的正确实现,一旦 SingletonClass 第一次通过 SharedInstance 初始化,它应该在应用程序处于活动状态的其余时间处于活动状态。

单例模式的全部意义在于共享该对象的单个实例。

你做这样的事情是没有意义的

__weak singletonObj = [SingletonClass SharedInstance];
[singletonObj methodA];

因为当您调用共享实例时,始终可以访问相同的对象。 不管 ClassOther 做什么和不应该做什么,SingletonClass 的实例应该从第一次调用 SharedInstance 到从内存中清除应用程序时保留在内存中。

SharedInstance 应该是小写的,sharedInstance。

如果使用普遍接受的模式(使用静态变量和dispatch_once)创建单例对象,它将创建一次并永久保留在内存中。如何做到这一点已经回答了几十次,所以只需搜索它。

在使用单例对象时,绝对没有理由使用弱或强或任何指针来摸索。

相关内容

  • 没有找到相关文章

最新更新