Instrument之Leaks

这篇介绍Xcode的Instrument之Leaks
我们经常遇到的内存泄露有

  • 对象初始化之后没有release,这在MRC的环境下比较明显。在ARC环境下,主要是C的内存释放需要手动。
  • 循环引用,导致对象一直得不到释放

我们的检查分为两步

1.第一步是静态分析

用Xcode,Product里面的Analyze,他可以指出你code里面可能出现内存泄露的地方,和一些简单的性能分析
1.未继承父类方法

未调用[super viewWillAppear].png

2.有变量未使用

未读的值.png

3.可能导致内存泄露

可能导致内存泄露.png

Tip:当你试图访问一个内存已经被释放的对象时,也就是野指针问题,会出现这样的crash信息

指针找不到内存空间.png

2.Leaks

我们不能靠analyze找出所有的内存泄露,这时候需要更加强大的工具 Leaks
选择,Open Developer Tool -> instruments,出现如下模块

Instrument之Leaks_第1张图片
51AD9544-8471-4846-B9EF-95D2B2FAC156.png

选择Leaks,选择设备和要运行的Project

Instrument之Leaks_第2张图片
7330681D-C8A0-4899-8B01-3EC1AA009057.png

选择红色按钮,开始检测,当出现红色叉叉的符号时,说明这个地方有内存泄露

出现内存泄露的地方.png

详细数据请看Detail pan

9E09E78C-4A3A-47C4-824D-7205D76FBC2B.png

Leaked Object :泄露的对象
Address: 内存中的地址,说明有多个,可以下拉展开
Size: 一共泄露内存的大小
Responsible Library: 相关的库
Responsible Frame:所在的方法,双击这里可以调到Xcode里对应方法里面

上面看的是Detail pan 上面的Leaks,下面看Call Tree

Instrument之Leaks_第3张图片
Call Tree.png

右侧的Display Setting 的Call Tree 选择隐藏系统库(Hide system Libraries),颠倒Call Tree(Invert Call Tree)
这样可以很方便的看到你在你代码里出现的内存问题

再看我代码里的问题,

Instrument之Leaks_第4张图片
24C81D0A-74F7-4719-B462-5C971F71DEFE.png

因为是在MRC环境下,这下People的对象都没有Release。

生命不息,coding不止。
谢谢阅读。

你可能感兴趣的:(Instrument之Leaks)