ios - 保留带有 3 个对象的循环 Objective-C

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

我有 3 个对象 - 一个 ViewController,另一个是 ViewController 的强大属性的 VC(称之为 VC2),以及一个名为“Checker”的类,它检查是否在 VC2 中发生了一个 Action 。 “Checker”只是一个具有类方法的类 - 没有实例方法。

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

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

最佳答案

关于您的评论,A 是:

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

{
  …
  [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 
}

这是因为局部变量(和潜在的参数变量,类似于局部变量)是附加引用,但由于没有引用它们,所以它不是保留循环.

您没有保留周期。

关于ios - 保留带有 3 个对象的循环 Objective-C ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32021498/

相关文章:

html - 带指针事件的 iframe :none hijacks clicks in Safari on iOS

ios - 什么时候 .removeObserver ?

objective-c - iCloud、Core Data 和 Xcode 6.01 与 iOS 8 的无效代码签名授权

objective-c - 检测 UITableView 中的水平平移

c++ - 我可以只使用固定数组而不是内存池吗?

C++:关于内存管理,指针本身是如何处理的?

ios - IQKeyboardManager问题,UIViewController顶部重叠状态栏

html - CSS-Banner 调整 : Scale

objective-c - 当前 View Controller 显示黑屏

c - 重新分配内存并在 C 中重新分配的内存空间添加一个字符串