子视图控制器从父级移除后保留

时间:2019-08-20 20:10:38

标签: ios swift xcode uiviewcontroller retain

在一个针对iOS 12的Swift项目中,我有一个子视图控制器,该子视图控制器从其父视图中移除后(以及从.superview中移除了它的视图之后)仍保留着。

Xcode的Memory Debugger显示如下:

Xcode memory debugger screenshot

右侧的选定对象(IAIARViewController)是意外保留的对象。我假设深色线/箭头表示强引用,而浅灰色线(例如来自SCNRenderer)表示弱引用,这意味着保留实例的罪魁祸首是ViewController的_childViewControllers NSMutableArray存储。

但是,当我打印NSMutableArray(在链中最接近IAIARViewController实例的描述)的描述时,我得到:

Printing description of $20:
<__NSArrayM 0x112e12370>(
    <***.IAIChartViewController: 0x113226400>,
    <***.IAIMapViewController: 0x113093400>
)

即数组中没有IIAARViewController的实例(内容是我所期望的。)

这似乎可能是来自Xcode内存图调试器的错误信息。还有什么可能导致IAIARViewController被保留?

1 个答案:

答案 0 :(得分:0)

您可以尝试逐一注释控制器的属性(变量),并找出它们是否仍保留。我认为问题出在这些属性之一上。

还可以使用仪器检查泄漏(查看屏幕截图)。它可以为您提供更多详细信息。enter image description here