在Apple的文档中,它说
如果需要管理除释放实例变量之外的资源,则可以实现dealloc方法。您不必(实际上您不能)释放实例变量,但您可能需要在系统类和未使用ARC编译的其他代码上调用[systemClassInstance setDelegate:nil]。
这是否包括UIKit和Framework委托,例如,UIPageViewController
的父级具有委托UIPageViewControllerDelegate
- 这是否必须在dealloc中填充?
答案 0 :(得分:2)
当父控制器与其视图之间存在关系时,父控制器充当视图委托,其中一个关系不能保留另一个,否则您将有一个保留周期和内存泄漏。
有两种方法可以做到这一点:
首先将委托标记为__unsafe_unretained。如果这样做,您将需要在控制器的dealloc中手动取出引用。
第二种是使用弱引用。大多数ARC都发生在编译时。这有助于通过减少垃圾收集器可能发生的CPU周期来节省电池消耗。但是,对于弱引用,有一个运行时进程维护这些变量的映射,观察它们,并根据需要将它们取出。这就是为什么弱引用需要iOS5.1 - 它不仅仅是一个编译器功能。
如果使用太多弱引用,则可能是性能开销。在实践中,这几乎不会成为一个问题。
<强>摘要强>
<强>更新强>