你真的会使用Xcode instruments查找内存泄漏吗?
2016-08-17 本文已影响1324人
幸福晓杰2016
很多朋友在面试中都会被问到这个问题,结果答地并不好,这是其实是实操的问题
我今天就和大家简单分享一下怎么使用这个leak检测工具.直接上图:
![](https://img.haomeiwen.com/i2219631/a67acc93dac0b99a.png)
点击上面Profile ,稍等便可进入Xcode内部自带的instruments工具
![](https://img.haomeiwen.com/i2219631/c563bbd06b8671c3.png)
点击进去后,点击左上角的红点,可以进行内存检测
![](https://img.haomeiwen.com/i2219631/4cec7958920b4c94.png)
这里可以内存多少,有多少对象内存泄漏
![](https://img.haomeiwen.com/i2219631/63dbc5901a2cf200.png)
点击下边leak checks ,可以看到下边栏有三个选项 leak,Cycles & Roots, Call Tree,分别对应的是内存泄漏,循环引用,调用树. leak点击右边红框类可以进入内存泄漏的代码区域.
![](https://img.haomeiwen.com/i2219631/d9f3d804a41a234c.png)
Cycles & Roots 可以看到循环引用的环,我的成环图找不到了,从Detail中是可以分为simple Cycle 简单环(两个对象),还是Complex Cycle复杂环(涉及多个对象引用成环).
![](https://img.haomeiwen.com/i2219631/fb6189cd9277998b.png)
Call Tree 就是调用堆栈,如果你的内存泄漏都是第三方框架之中,那么极有可能是你使用第三方不当所致,可以好好看一下调用堆栈,是哪里调用了.红框中区域表示内存的泄漏出现的概率.
![](https://img.haomeiwen.com/i2219631/a0a180590eb62978.png)
下面是我找到的调用堆栈中泄漏代码中方法出处:人头标志是程序员自己写的代码
![](https://img.haomeiwen.com/i2219631/a1297f046442a72f.png)
其实,还是那句话:第三方虽然简单,几句话搞定,但是你不懂原理,还是会使用出问题来.
写代码做事情,还是要知其然还要知其所以然才行.
今天分享就到这里了.