保留周期 Objective C 与 3 个对象

Retain cycle Objective C with 3 objects

我有 3 个对象 - 一个 ViewController,另一个 VC 是 ViewController 的强项 属性(称之为 VC2),和一个名为 "Checker" 的 class,它检查是否在 VC2 中发生了动作。 "Checker" 只是一个带有 class 方法的 class - 没有实例方法。

当在 VC2 中发生操作时,它会向 "Checker" 发送一个数据结构来处理它。我需要将处理后的数据发送回 ViewController。我抓取 ViewController 的实例并通过方法发送它。 ViewController 获取处理后的数据并将其显示在视图中。

这会产生保留循环或任何其他与内存相关的问题吗?

关于您的意见,A是:

获取已存在的对象引用 ("already existing instance") 不会创建保留循环。默认情况下传递对方法的引用不会导致强引用:

{
  …
  [Checker doSomethingWith:vc2.referenceToVC1]; // Passing does not retain
  …
}

然而,即使它会或您在传递实例引用之前将其复制到强本地变量中,所有权也将是一个短期计时器并由 ARC 自动解析。

{
  …
  VC1 vc1 = vc2.referenceToVC1; // strong reference causing ownership, retain
  [Checker doSomethingWith:vc1];
  …
  // vc1 and its strong reference is automatically given up, release 
}

这是因为局部变量(可能还有类似于局部变量的参数变量)是额外的引用,但由于没有任何引用它们,所以它不是保留循环.

您没有保留周期。