检查项目中的内存泄漏问题

1.建立一个Demo工程(MRC),工程中写了一个会形成内存泄漏的代码。架构

 

 

2.command + i      打开Instruments工具app

 

 

3.双击选择 Leaks, 出现以下界面:ide

 

4.选择Leaks, 选择Call Tree,  勾选Invert Call Tree 和 Hide System Libraries函数

选择  Call Tree 表示查看整个调用过程工具

.性能

 

5.点击左上角 的  大红点按钮   启动Leaks spa

 

 

6.Demo中内存泄漏代码写在 touchesbegin 中,咱们点击一下模拟器的屏幕,发现Leaks中出现了一个红色的 ❌线程

 

7.按住鼠标左键  从 ❌ 的左边拖到右边 选中❌。此时Details 中就会出现,内存泄漏的代码了code

 

 

8.双击上面的代码,就会出现具体代码位置 , 以下图递归

 

 

9.点击右上方的Xcode图标 就能够跳到咱们Xcode中的具体代码中。

 

而后就去修改你的代码吧!

 

补充:

Display Setting   中   Call Tree  选项的说明:

Separate By Thread: 线程分离,只有这样才能在调用路径中可以清晰看到占用CPU最大的线程.每一个线程应该分开考虑。只有这样你才能揪出那些大量占用CPU的"重"线程,按线程分开作分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染全部的接口数据,一旦受到阻塞,程序必然卡顿或中止响应。


Invert Call Tree:从上到下跟踪堆栈信息.这个选项能够快捷的看到方法调用路径最深方法占用CPU耗时(这意味着你看到的表中的方法,将已从第0帧开始取样,这一般你是想要的,只有这样你才能看到CPU中花费时间最深的方法),好比FuncA{FunB{FunC}},勾选后堆栈以C->B->A把调用层级最深的C显示最外面.反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操做。


Hide System Libraries:表示隐藏系统的函数,调用这个就更有用了,勾选后耗时调用路径只会显示app耗时的代码,性能分析广泛咱们都比较关系本身代码的耗时而不是系统的.基本是必选项.注意有些代码耗时也会归入系统层级,能够进行勾选先后先后对执行路径进行比对会很是有用.由于一般你只关心cpu花在本身代码上的时间不是系统上的,隐藏系统库文件。过滤掉各类系统调用,只显示本身的代码调用。隐藏缺失符号。若是 dSYM 文件或其余系统架构缺失,列表中会出现不少奇怪的十六进制的数值,用此选项把这些干扰元素屏蔽掉,让列表回归清爽。


Flatten Recursion: 递归函数, 每一个堆栈跟踪一个条目,拼合递归。将同一递归函数产生的多条堆栈(由于递归函数会调用本身)合并为一条。

相关文章
相关标签/搜索