我有3个对象 - 一个ViewController,另一个VC是ViewController的强属性(称之为VC2),还有一个名为“Checker”的类,用于检查VC2中是否发生了一个动作。 “Checker”只是一个带有类方法的类 - 没有实例方法。
当VC2中发生某个操作时,它会向“Checker”发送一个数据结构来处理它。我需要将处理后的数据发送回ViewController。我抓住ViewController的实例并通过方法发送它。 ViewController获取处理过的数据并将其显示在视图中。
这是否会产生保留周期或任何其他与内存相关的问题?
答案 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)是附加的引用,但由于没有任何引用它们,所以它不是保留循环
您没有保留周期。