内存管理——对Swift单例总是使用[un主self]是安全的



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

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

使用弱引用还是强引用应该基于所编写函数的内存管理特征。例如,如果一个闭包被对象引用为强引用,那么闭包应该捕获对该对象的弱引用;这是安全的,因为没有其他人有对闭包的引用,所以它只能在主对象还活着的时候执行,等等。如果没有保留周期,并且闭包被提供给一个单独的API,这样它就不会绑定到主对象的生命周期,那么闭包应该具有对主对象的强引用。这个推理同样适用于单例和非单例。

是,单例模式持有对自身的强引用,并且不能被丢弃。

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

来自Apple文档:

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

一个简单的测试方法是从主类中测试。

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

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

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

相关内容

  • 没有找到相关文章

最新更新