【问题标题】:Difference Between weak & unowned in respect to ARC memory management in Swift 3.1 [duplicate]Swift 3.1 中关于 ARC 内存管理的弱和无主之间的区别 [重复]
【发布时间】:2017-10-23 00:04:25
【问题描述】:

我正在研究 Swift,我对在 Swift 中使用 unownedweak 关键字进行内存管理有点困惑。

谁能帮我了解在哪里使用unowned

提前致谢!

【问题讨论】:

    标签: swift memory-management automatic-ref-counting


    【解决方案1】:

    最重要的区别是无主变量在 Swift 中非常危险。

    weak 是可选类型,unowned 不是。

    这意味着您可以创建使用弱作为逻辑一部分的代码。 (想想只有当视图控制器仍然显示在屏幕上时才会发生的异步操作,当代码运行时,如果引用是“弱”的,如果代码编写正确,它将静默失败而不会导致任何其他问题)

    另一方面,当一个变量是无主的时,你基本上是在说这个变量总是会引用一些东西。而且不像weak,如果你调用它并且没有任何东西它会崩溃。

    您通常永远不想使用无主。 (我没有遇到任何我必须这样做的情况)。另一方面,“弱自身”变量在编写块时很常见。

    你可以看到这个问题的一个很好的解释:

    Shall we always use [unowned self] inside closure in Swift

    编辑:实际上,请检查投票最多的第一个和第二个答案。它们对何时使用 unowned 及其工作方式提供了清晰的解释。第二个甚至有图片!

    【讨论】:

      【解决方案2】:

      根据苹果文档

      开发者网站上有一些很好的例子,请查看link

      就 Apple Docs 所涉及的块而言:

      在闭包时将闭包中的捕获定义为无主引用 并且它捕获的实例将始终相互引用,并且将 总是同时被释放。

      反之,将捕获定义为弱引用,当捕获 reference 可能在将来的某个时候变为 nil。弱引用 总是一个可选类型,当 他们引用的实例被释放。这使您能够检查 它们存在于闭包体内。

      总结 使用弱引用,只要它是有效的 引用在其生命周期的某个时间点变为 nil。反过来, 当您知道引用永远不会使用时,请使用无主引用 一旦在初始化期间设置为 nil。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 2012-06-28
        • 2011-11-14
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        相关资源
        最近更新 更多