使用Xcode和Instruments处理iOS内存泄露

对于MRC来说,了解内存泄露是非常重要的,尽管大部分人现在使用的是ARC。虽然iOS加入了ARC机制,但由于相互引用关系比较复杂,内存泄露还是可能存在的。所以有必要了解其原理。

下面我们就来看看如何使用Instruments来查找程序中的内存泄露,以及NSZombirEnabled(僵尸模式)的设置:

1.打开你的工程,在崩溃的地方断住了,知道crash的地方了,但是不知道具体crash的原因。如

使用Xcode和Instruments处理iOS内存泄露_第1张图片
这里

2.设置NSZombieEnabled开始调试吧

首先,我们开启僵尸模式,如图


使用Xcode和Instruments处理iOS内存泄露_第2张图片
在你的xcode的左边,长按就出来了

然后这个勾选


使用Xcode和Instruments处理iOS内存泄露_第3张图片
勾选开启僵尸模式

然后运行程序,按刚才的操作选中其中的cell。再次crash,这次在output窗口会看到多了一项错误信息。问题基本就可以找出来了。

3.下面我们来看如何分析内存泄露

用XCode的Analyze就能分析到哪里有内存泄露,看图


使用Xcode和Instruments处理iOS内存泄露_第4张图片
xcode为第一响应

然后设置了以后,我们会看到这个


使用Xcode和Instruments处理iOS内存泄露_第5张图片
蓝色标志的地方就是有内存泄露的地方来了

4. 下面使用Instruments的leaks工具来查看

首先

使用Xcode和Instruments处理iOS内存泄露_第6张图片
还是要xcode第一响应

使用Xcode和Instruments处理iOS内存泄露_第7张图片
选择Leaks,然后Choose

选中list中的项,拖动等操作后,工具显示

使用Xcode和Instruments处理iOS内存泄露_第8张图片
红色的柱子表示内存泄露

下面我们来定位泄露的地方。

先在工具栏按下红色的圆形按钮,把工具监视内存的活动停下来。选择Leak,然后点中间十字交叉那,选择Call Tree.

使用Xcode和Instruments处理iOS内存泄露_第9张图片
选中Leak,选择CallTree

这时候左下角的Call Tree的可选项可以选了。选中Invert Call Tree 和Hide System Libraries,显示如下:

使用Xcode和Instruments处理iOS内存泄露_第10张图片

这时候内存泄露的具体代码找到了,在右边的红色框框里指定了哪个方法出现了内存泄露。

你只要在这些方法上双击,就会跳转到具体的代码

使用Xcode和Instruments处理iOS内存泄露_第11张图片
泄露的地方找到了,就是红色区域

到这里,内存泄露基本已经找到了,找适当的地方release下吧。

你可能感兴趣的:(使用Xcode和Instruments处理iOS内存泄露)