原文iOS — Identifying Memory Leaks using the Xcode Memory Graph Debugger
这篇文章主要介绍
- 什么是Xcode memory graph debugger
- 怎样使用及一些tips
- 优缺点
What is it
长话短说, memory graph debugger回答了为什么一个对象存在内存中?
Xcode memory graph debugger可以帮助找到和修复循环引用与内存泄露。当被激活时,会暂停app运行,展现当前堆中的对象,对象的关系,对象间的引用。
How to use it
3个步骤检查循环引用和内存泄露
- 在Xcode scheme editor中选中stack logging integration,如图
- 执行你想要分析的app,通过点击如下按钮进入memory graph debugging模式:
- memory graph debugging会暂停app运行并展示如图:
左边展示app堆中的内容
选中一个实例可以在中间展现实例的引用
选中中间的实例可以生成对象的内存信息,内存泄露信息如下:
Tips
- 为了确定内存泄露,我们可以通过如图方法选择堆内容仅仅展示泄露
- 运行时信息是有用的,可以展示全部泄露数
The good and the bad
- 优点:可以轻松地找到一些简单的泄露,比如循环引用。例如一个对象在闭包中持有自己,通过闭包捕获列表可以轻易修复内存泄露。
- 缺点:可能找不到已经泄露的点。比如,创建一个UIButton对象并在上面天津一个UIToolBars items数组,我们只能看到这发生了内存泄露却看不到为什么泄露。
Useful links
- https://developer.apple.com/videos/play/wwdc2016/410/
- https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html#//apple_ref/doc/uid/TP40015022-CH9-DontLinkElementID_1
- https://useyourloaf.com/blog/xcode-visual-memory-debugger/