In Xcode 8, you can click on the "Debug Memory Graph" button, in the debug toolbar (shown at the bottom of the screen):
参见苹果的诊断和解决正在运行的应用程序中的错误:可视化和诊断不断增加的内存使用情况.
只需识别左侧面板中您认为应该已释放的对象,它就会向您显示对象图(如上面的主画布所示)。这对于快速识别在相关对象上建立强引用的位置非常有用。从这里开始,您可以开始您的研究,诊断为什么这些强引用没有被解析(例如,如果有问题的对象具有来自其他应该被释放的对象的强引用,也可以查看该对象的图表,您可能会发现问题(例如强引用循环、重复计时器等)。
请注意,在右侧面板中,我看到了调用树。我通过在方案设置中打开“malloc stack”日志记录选项得到了这一点:
无论如何,完成此操作后,可以单击上面第一个屏幕快照右侧面板中堆栈跟踪中显示的相关方法调用旁边的箭头,您可以看到该强引用最初是在哪里建立的:
传统的 Instruments 技术(如果使用旧版本的 Xcode 特别有用)在我原来的答案中描述如下。
我建议使用 Instruments 的“分配”工具和“记录引用计数”功能:
然后,您可以在 Instruments 中运行该应用程序,然后搜索您知道存在泄漏的类,并通过单击箭头进行钻取:
然后,您可以使用右侧的“扩展详细信息”面板深入了解详细信息并查看堆栈跟踪:
在“扩展详细信息”面板中,重点关注黑色代码,而不是灰色系统调用。无论如何,从“扩展详细信息”面板中,您可以直接在 Instruments:: 中深入了解源代码:
有关使用 Instruments 追踪内存问题的更多信息和演示,请参阅:
- WWDC 2021 视频检测并诊断内存问题
- 2019 年全球开发者大会视频仪器入门
- 2018 年全球开发者大会视频iOS 内存深度探究
- 2013 年全球开发者大会视频修复内存问题
- 2012 年全球开发者大会视频iOS 应用性能:内存