假设我们有一个名为 SingletonClass 的 Singleton 类。我们可以通过以下方式访问它
[SingletonClass SharedInstance]
现在,当我们在任何其他类中通过执行以下操作来访问其方法时,例如 ClassOther
__weak singletonObj = [SingletonClass SharedInstance];
[singletonObj methodA];
所以 singletonObj 弱链接并在 ClassOther 的对象发布时正确释放。
但如果我尝试
[SingletonClass SharedInstance] methodA];
当 ClassOther 被释放时,它会释放所有腐蚀到 SingletonClass 的东西吗?即它是否循环并且当我们访问 SingletonClass 并且它没有弱链接时没有释放 ClassOther?
方法实际上是单例模式的正确实现,一旦 SingletonClass 第一次通过 SharedInstance 初始化,它应该在应用程序处于活动状态的其余时间处于活动状态。
单例模式的全部意义在于共享该对象的单个实例。
你做这样的事情是没有意义的
__weak singletonObj = [SingletonClass SharedInstance];
[singletonObj methodA];
因为当您调用共享实例时,始终可以访问相同的对象。 不管 ClassOther 做什么和不应该做什么,SingletonClass 的实例应该从第一次调用 SharedInstance 到从内存中清除应用程序时保留在内存中。
SharedInstance 应该是小写的,sharedInstance。
如果使用普遍接受的模式(使用静态变量和dispatch_once)创建单例对象,它将创建一次并永久保留在内存中。如何做到这一点已经回答了几十次,所以只需搜索它。
在使用单例对象时,绝对没有理由使用弱或强或任何指针来摸索。