前言
作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎很多开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原因,还是会出现内存泄露的问题.内存泄露是一个很严重的问题.下面就简单介绍下怎么使用Xcode8.2.1自带的Instruments中的Leaks检测我们的程序有没有内存泄露和定位内存泄露的代码.(分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的)
一:打开 Instruments 工具
打开一个项目,选择Product --> Profile(这个时候就打开了instrument) 或者通过快捷键:command+ i --> 选择Leaks ,然后双击或者选择Choose按钮既可打开程序。
二.简单的认识一下区域和按钮
1.绿色的箭头所指的就是:开始启动检测一个App的内存泄漏(只要不停止或者不暂停就会一直监测)
2.紫色的箭头所指的就是:暂停检测当前的App
3.红色箭头所指的就是:选择要检测的App
4.黑色箭头所指的就是:内存泄漏
5.橙色区域框包括的就是:对应的时间段内存是否泄漏,泄漏的个数(这个是关键)
6.绿色区域框包括的就是:内存地址,对象大小,对应的库等一些详细信息
7.红色区域框包括的就是:一些对应的详细设置和配置
三.运行一下
如截图所示,我现在运行一个App,红色箭头所指的就是:说明没有内存泄漏,黑色箭头所指的就是:有内存泄漏,并且有对应的泄漏个数。绿色框中的就是一些对应的信息,可以选择查看。
四.小试牛刀
如截图所示,我上面有三处内存泄漏,三处泄漏的个数分别是:29 43和1(鼠标放在红色的内容泄漏处就可以查看对应的个数),这三处泄漏的个数有些是系统的,有些是自己代码的,也有些是第三方框架的。
所以我们首先要定位,将三中的绿色区域框中的选择为Call Tree
其次筛选去除掉一些系统的泄漏,将二中的红色区域框选中第二个设置,在Call Tree选项中选择 Invert Call Tree(反向输出调用树) 和 Hide System Libraries(隐藏系统库文件) 两个选项,以此达到过滤的目的,最后就是上面截图图所示。
五.分析和对应的泄漏代码定位
通过一些筛选, 最终的几处泄漏详情如下截图所示,双击对应的代码行即可找到对应的泄漏代码
通过对应的方法名可以判断到底是自己写的代码泄漏还是第三方框架的泄漏,一般大型的第三方框架的泄漏我不怎么会修改,怕影响全局,自己写的就好修改了。下面截图中的绿色箭头所指的就是自己写的代码泄漏。