手动将 nil 设置为 swift 对象以避免保留循环?

Manually set nil to swift object to avoid retain cycle?

我最近一直在分析一个用 swift 编写的应用程序,总体上对 ARC 感到非常沮丧,因为它来自以标记清除 GC 为常态的语言。

特别是,UIViewController非常 复杂且对其他 class 有很多依赖性,我一直未能使 ARC 正常工作。但我知道只需将保留的对象设置为 nil 即可在不涉足 ARC 的情况下释放它们。

对于 UIViewController 尤其如此,我可以将 nil 设置为 viewDidDisappear 或类似的所有保留对象。

这种做法被认为是不好的/有害的吗?我应该更努力地让 ARC 工作吗?

edit:不工作,我主要是想打破Strong Reference Cycle,当有多个依赖层次结构时,它变得非常笨拙。

编辑:仅供参考,我知道在声明/捕获列表中使用 weak / unowned 会打破保留周期。我问的是由于对象的复杂性,或者更确切地说,对象的保留周期,使用这些规范变得笨拙的情况。

Try deinit Method its wright way I guess

 deinit{
    person = nil
}

我认为你应该看看你的 class 结构 - 基本上找出哪些 class 应该 "own" 某些属性(即强引用)以及谁只需要在它们可用时引用它们(即弱引用)。

我认为这很值得考虑,因为它可能会简化您的代码。它还会让您有机会真正考虑特权 - 所有这些其他 class 是否真的需要访问这些对象等

将事物设置为 nil 的真正问题是,您必须确保捕获所有强引用循环,并且最终,您不会从 ARC 中获益,让您的生活更轻松。