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

时间:2015-05-29 02:44:43

标签: swift memory-management singleton reference-counting unowned-references

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

2 个答案:

答案 0 :(得分:5)

当然,这很安全。但这不是一个好理由。

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

答案 1 :(得分:0)

是的,单身人士对自己有强烈的引用,不能被处置。

基于此可以肯定地说,您可以安全地创建对它的弱引用或无主引用。

From Apple documents:

  

该类懒洋洋地第一次创建它的唯一实例   请求,然后确保没有其他实例可以   创建。单例类还可以防止调用者复制,   保留或释放实例。

测试它的一种简单方法是从主类测试。

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

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

  • 现在读取值,如果仍然存在值,则证明单身人士通过自己的参考保持活着。