对于Swift单身人士,总是使用[无主自我]安全吗?

Sch*_*uce 3 singleton memory-management reference-counting swift unowned-references

由于共享单例实例将始终存在,我们是否可以安全地使用[unowned self]该单例类中的所有闭包?

new*_*cct 5

当然,这是安全的.但这不是一个好理由.

是否使用弱引用或强引用应基于您正在编写的函数中的内存管理特性.例如,如果对象强烈引用闭包,则闭包应捕获对象的弱引用; 并且这是安全的,因为没有其他人有关闭的引用,所以它只能在主对象存活时执行,等等.如果没有保留周期,并且闭包被赋予一个单独的API,以便它不被绑定到主对象的生命周期,那么闭包应该对主对象有一个强引用.这种推理同样适用于单身人士和非单身人士.


Ica*_*aro 1

是的,单例拥有对其自身的强引用,并且无法被处置。

在此基础上可以肯定地说,您可以安全地创建对其的弱引用或无主引用。

来自苹果文档:

该类在第一次被请求时延迟创建其唯一实例,此后确保无法创建其他实例。单例类还可以防止调用者复制、保留或释放实例。

测试它的一个简单方法是从主类进行测试。

  • 创建一个新类(我们称之为“第一类”),它使用一些值初始化单例,并在完成唯一作业后将其释放。
  • 之后,在主类中创建另一个类(我们称之为“第二类”),它检索单例实例并读取其值。

在第一个(已处置的)类和第二个(新创建的)类之间没有对单例的引用。

  • 现在读取这些值,如果值仍然存在,则证明该单例通过其自己的引用保持活动状态。