这篇介绍Xcode的Instrument之Leaks
我们经常遇到的内存泄露有
- 对象初始化之后没有release,这在MRC的环境下比较明显。在ARC环境下,主要是C的内存释放需要手动。
- 循环引用,导致对象一直得不到释放
我们的检查分为两步
1.第一步是静态分析
用Xcode,Product里面的Analyze,他可以指出你code里面可能出现内存泄露的地方,和一些简单的性能分析
1.未继承父类方法
2.有变量未使用
未读的值.png3.可能导致内存泄露
可能导致内存泄露.png指针找不到内存空间.pngTip:当你试图访问一个内存已经被释放的对象时,也就是野指针问题,会出现这样的crash信息
2.Leaks
我们不能靠analyze找出所有的内存泄露,这时候需要更加强大的工具 Leaks
选择,Open Developer Tool -> instruments,出现如下模块
选择Leaks,选择设备和要运行的Project
7330681D-C8A0-4899-8B01-3EC1AA009057.png选择红色按钮,开始检测,当出现红色叉叉的符号时,说明这个地方有内存泄露
出现内存泄露的地方.png详细数据请看Detail pan
Leaked Object :泄露的对象
Address: 内存中的地址,<multiple>说明有多个,可以下拉展开
Size: 一共泄露内存的大小
Responsible Library: 相关的库
Responsible Frame:所在的方法,双击这里可以调到Xcode里对应方法里面
上面看的是Detail pan 上面的Leaks,下面看Call Tree
Call Tree.png右侧的Display Setting 的Call Tree 选择隐藏系统库(Hide system Libraries),颠倒Call Tree(Invert Call Tree)
这样可以很方便的看到你在你代码里出现的内存问题
再看我代码里的问题,
24C81D0A-74F7-4719-B462-5C971F71DEFE.png因为是在MRC环境下,这下People的对象都没有Release。
生命不息,coding不止。
谢谢阅读。
网友评论