- Xcode 中 按住 command + I 或者菜单栏 Product – Profile
2. 双击 Leaks 或者按 choose,打开 Leaks 面板
3. 在显示的 Leaks 面板中,点击左上角红色点,即可运行内存检测。
4. 在运行过程中如果发现Leak Checks(如图)出现红色X说明检测到内存泄露,将鼠标点击Leak Checks,在下方即可看到内存泄漏的相关信息。
5. 定位内存泄漏代码位置
- 选择 Leaks 有时候默认是 Run lssues,这时需要将其切换为 Leaks
- 选择 call Three
3. 此时,仍然看不到具体的代码位置,需要选择底部的 Call Tree,在弹窗中选择 Invert Call Tree 和 Hide System Libraries,即可显示出具体内存泄漏的代码。
Call Tree 四种选项具体含义:
Separate by Thread:按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。
Invert Call Tree:反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。
Hide System Libraries:隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。
Flattern Recursion:拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。
- 双击选中行,即可跳转 Instrument 中具体的代码
- 点击右侧 Xcode 图标跳转至 Xcode 中定位的内存未回收的代码
注意:如果第五步不出现定位箭头,无法定位到具体代码,则点击项目工程文件-Buidl Setting-All-搜索Debug Information Format-Debug里选择DWARF with dSYM File(如图)
默认情况下,只有 release 环境下为 DWARF with dSYM File,其他环境均为 DWARF。当 Debug Information Format 为 DWARF with dSYM File 的时候,构建过程中多了一步 Generate dSYM File,最终产出的文件也多了一个 dSYM 文件。然后,重新编译启动 Instruments Leaks,重复以上步骤即可定位到具体代码。