使用3个对象保留循环Objective C.

时间:2015-08-15 04:24:33

标签: ios objective-c memory-management retain-cycle

我有3个对象 - 一个ViewController,另一个VC是ViewController的强属性(称之为VC2),还有一个名为“Checker”的类,用于检查VC2中是否发生了一个动作。 “Checker”只是一个带有类方法的类 - 没有实例方法。

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

这是否会产生保留周期或任何其他与内存相关的问题?

1 个答案:

答案 0 :(得分:2)

关于你的意见,A是:

抓取已存在的对象引用(“已存在的实例”)不会创建保留周期。默认情况下,传递对方法的引用不会导致强引用:

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

但是,即使它会将实例引用复制到强本地var中,然后传递它,所有权将是一个短计时器并由ARC自动解决。

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

这是因为本地var(可能是参数var,类似于本地var)是附加的引用,但由于没有任何引用它们,所以它不是保留循环

您没有保留周期。