【问题标题】:Controversy with ownership in Objective CObjective C 中的所有权争议
【发布时间】:2017-03-15 15:35:57
【问题描述】:

在我上一次尝试了解 Objective-C 内存管理时,有一次我问自己以下问题:

由于 Objective-C 中的weak 引用让我们避免了保留循环,为什么不一直使用它们?

【问题讨论】:

  • 如果一切都很弱,那么就没有任何东西可以保持对任何东西的引用,所有对象都会立即消失。
  • 顺便说一句 - 你指的是什么“争议”?
  • @rmaddy,所以这意味着如果我创建两个使用弱引用相互指向的对象,它们会立即消失吗?
  • @user3524337 如果没有其他(强)对象引用,是的,它们会消失。
  • @DrummerB 好的,谢谢!现在我很清楚了。

标签: objective-c pointers reference


【解决方案1】:

一个对象只有在至少有一个强(默认)引用时才会保留在内存中。如果只使用弱引用,对象会立即被释放。

简单地说,“弱”的意思是:这个对象属于别人,我只是访问它,我不介意它是否消失。

【讨论】:

    【解决方案2】:

    Objective-C 中的弱引用让我们可以避免保留循环,为什么不一直使用它们?

    因为对象一旦没有强引用就会被释放。

    更重要的是,通常需要强引用来防止对象的释放。例如,视图控制器最终对其视图负责——让控制器的视图突然消失是没有多大意义的。所以UIViewController的view属性很强。

    当两个对象都对另一个对象具有强引用时,就会发生保留循环。只要另一个对象保持强引用,两个对象都不能被释放。如果您了解这种情况,这并不是真正的问题,因为您可以通过消除任何一个引用来打破保留周期。然而,很容易意识到这个循环,或者忘记处理它,然后你就有两个对象在内存中相互保存,超出了它们的使用寿命。使这些引用之一变弱可以解决问题,但这也意味着被引用的对象可能会被释放,并且引用可能在任何时候变为 nil。实际上,这通常不是问题。

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多