Overview

最近几天在进行公司项目的测试,用到了Leaks进行内存泄露的检测。
鉴于网上千篇一律的旧版教程,变萌生了写一篇针对新版Xcode面向萌新的教程。

工具

Xcode 10.1
Instruments

唤起Instruments面板

1、打开Xcode
2、按住command + I 或者 菜单栏Product – Profile(选择真机)
https://img.wangquanwei.com/wp-content/uploads/2019/01/E4688BF7-A960-4236-A49C-1822AF5A992E.jpeg

等待项目编译通过即可打开Instruments面板

Leaks的使用

1、选择Leaks双击 或者 按 choose
https://img.wangquanwei.com/wp-content/uploads/2019/01/E4B56B33-B818-466F-B5C5-E764BD03F1DD.jpeg

2、打开Leaks面板
https://img.wangquanwei.com/wp-content/uploads/2019/01/E39F22EC-8A6F-4743-A191-E79B34934F17.jpeg

3、点击左上角红色点,即可运行内存检测

4、在运行过程中如果发现Leak Checks(如图)出现红色X说明检测到内存泄露,将鼠标点击Leak Checks,在下方即可看到内存泄漏的相关信息

5、定位内存泄露代码位置

第一步:选择Leaks有时候默认是 Run lssues(如图)
https://img.wangquanwei.com/wp-content/uploads/2019/01/F1CE3776-AA02-4BBA-B41C-7325532D7F4C.jpeg

第二步:选择Call Tree
https://img.wangquanwei.com/wp-content/uploads/2019/01/14C1AA68-448D-4867-80B3-E5FF7F05C7CD.jpeg

第三步:选择底部的Call Tree在弹窗中选择Invert Call Tree 和 Hide System Libraries,即可显示出具体内存泄漏的代码,但假如还不显示请看第四步(如图)
https://img.wangquanwei.com/wp-content/uploads/2019/01/473879D1-91EB-4031-9928-126C4ADFDA6C.jpeg

第四步:如果第三步还无法定位到具体代码,则
点击项目工程文件-Buidl Setting-All-搜索Debug Information Format-Debug里选择DWARF with dSYM File(如图)
https://img.wangquanwei.com/wp-content/uploads/2019/01/1FA5A3E6-A3CE-4FFB-A8B9-AE7F468244AD.jpeg

然后重新编译启动Leaks重复上面1-3步骤即可定位到具体代码

例如这里就是我使用第三方库blocksKit,这个库存在内存泄漏

查看内存泄漏引用图

将Call Tree选项改为Cycles & Roots 即可查看,不是所有的都可以查看。

The End