保留周期 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
}
这是因为局部变量(可能还有类似于局部变量的参数变量)是额外的引用,但由于没有任何引用它们,所以它不是保留循环.
您没有保留周期。
我有 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
}
这是因为局部变量(可能还有类似于局部变量的参数变量)是额外的引用,但由于没有任何引用它们,所以它不是保留循环.
您没有保留周期。