在一个目标为iOS 12的Swift项目中,我有一个子视图控制器,在从其父控制器中移除(以及从.superview中移除其视图)后仍然被保留。
Xcode的内存调试器显示了这个问题:
所选对象(IAIARViewController)是意外被保留的对象。我认为,黑色的线/箭头表示强引用,而浅灰色的线(例如来自SCNRenderer)表示弱引用,这暗示着保留实例的罪魁祸首是ViewController的_childViewControllers NSMutableArray存储。
然而,当我打印NSMutableArray的描述(在最接近IAIARViewController实例的那个数组)时,我得到的是:
Xcode的内存调试器显示了这个问题:
所选对象(IAIARViewController)是意外被保留的对象。我认为,黑色的线/箭头表示强引用,而浅灰色的线(例如来自SCNRenderer)表示弱引用,这暗示着保留实例的罪魁祸首是ViewController的_childViewControllers NSMutableArray存储。
然而,当我打印NSMutableArray的描述(在最接近IAIARViewController实例的那个数组)时,我得到的是:
Printing description of $20:
<__NSArrayM 0x112e12370>(
<***.IAIChartViewController: 0x113226400>,
<***.IAIMapViewController: 0x113093400>
)
即没有IAIARViewController的实例在数组中(而且内容如我所预期)。
这似乎是来自Xcode内存图调试器的错误信息。还有什么可能会导致IAIARViewController被保留?
最初的回答:根据您提供的信息,Xcode Memory Graph Debugger中的信息可能存在误导性。除了数组之外,还有其他原因可能导致IAIARViewController被保留。