swift - 'unowned' 是否像 'strong' 引用一样不会增加 Swift 中的引用计数?

标签 swift automatic-ref-counting

我一直在研究无主引用类型,试图了解它与强引用的比较。

在与我的同事讨论并浏览文章之后,我终于找到了 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?

是的,就目前而言它是准确的。但这与引用计数无关,除非是次要的。它是关于 retainrelease 的,恰好是操纵引用计数的调用。强引用在赋值时调用retain,稍后处理release。无主引用没有;它根本不管理分配对象的内存。

因此,你需要无主对象的保证生命周期比这个对象长,因为理论上无主对象可以消失而这个对象仍然存在,如果它这样做,对无主对象的引用将成为对垃圾的引用(悬空指针),你的 future 可能会发生神秘的崩溃。

关于swift - 'unowned' 是否像 'strong' 引用一样不会增加 Swift 中的引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53165117/

相关文章:

ios - 从 TableView 为索引部分和行传递正确的 Realm 对象时出现问题

iphone - 使用带有 ARC 的 ios5 选择地址簿地址

multithreading - 将某些任务分派(dispatch)到 "background thread"并在完成后在主线程上执行任务的最佳方法是什么?

ios - 什么时候在 block 中引用 self 是一个保留周期?

objective-c - 在后台线程 Objective C 中销毁对象

Java Android - 如何调用 onSuccess 方法

ios - 无法使用类型为 'UnsafeMutablePointer<Int32>' 的参数列表调用类型为 '(Int32?)' 的初始值设定项

json - 在 Swift 中动态构建 JSON

swift - 共享扩展 : Grab thumbnail in custom view controller like SLComposeServiceViewController

ios - 在异步操作后设置 CoreData 字段(但不包括其他字段)时的 EXC_BAD_ACCESS