在Xcode 8中,您可以单击“调试内存图”按钮,在调试工具栏中(显示在屏幕底部):
只需标识左侧面板中您认为应该已解除分配的对象,它将显示对象图(如上面的主画布所示)。这对于快速确定在所涉对象上建立强引用的位置非常有用。从这里开始,您可以开始您的研究,诊断为什么这些强引用没有得到解决(例如,如果所讨论的对象具有来自本应被取消分配的其他对象的强引用,也可以查看该对象的图表,您可能会发现这个问题(例如,强引用周期、重复计时器等)。
注意,在右边的面板上,我看到了呼叫树。我是通过打开方案设置中的“malloc堆栈”日志选项来实现这一点的:
无论如何,这样做之后,您可以单击上面第一个屏幕快照的右面板中的堆栈跟踪中显示的相关方法调用旁边的箭头,您可以看到最初建立强引用的位置:
上述内存诊断技术(及更多)将在WWDC 2016的后期演示。用Xcode进行可视化调试.
在我最初的回答中,传统的仪器技术(如果使用旧版本的Xcode特别有用)将在下面描述。
我建议使用具有“记录参考计数”功能的仪器“分配”工具:
然后,您可以在“仪器”中运行该应用程序,然后搜索您知道正在泄漏的类,然后单击箭头钻进去:
然后,您可以使用右侧的“ExtendedDetails”面板钻研详细信息并查看堆栈跟踪:
在“扩展详细信息”面板中,将注意力集中在黑色代码上,而不是系统调用的灰色代码上。无论如何,在“扩展详细信息”面板中,您可以钻到源代码中,在仪器中:
有关使用仪器追踪记忆体问题的更多资料及示范,请参阅: