我一直在研究无主引用类型,试图了解它与强引用的比较。
在与我的同事讨论并浏览文章之后,我终于找到了 Swift 文档,该文档解释了 unowned 与 weak 的不同之处在于“如果捕获的引用永远不会变为 nil,则应始终将其捕获为 unowned引用,而不是弱引用。” - https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
如果我对 unowned
的理解是正确的,在我看来它就像一个不会增加引用计数的“强”引用。准确吗?
感谢您的帮助!
最佳答案
If I understand unowned correctly, it seems to me that it is just like a 'strong' reference that doesn't increase the reference count. Is that accurate?
是的,就目前而言它是准确的。但这与引用计数无关,除非是次要的。它是关于 retain
和 release
的,恰好是操纵引用计数的调用。强引用在赋值时调用retain
,稍后处理release
。无主引用没有;它根本不管理分配对象的内存。
因此,你需要无主对象的保证生命周期比这个对象长,因为理论上无主对象可以消失而这个对象仍然存在,如果它这样做,对无主对象的引用将成为对垃圾的引用(悬空指针),你的 future 可能会发生神秘的崩溃。
关于swift - 'unowned' 是否像 'strong' 引用一样不会增加 Swift 中的引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53165117/