Xcode内存泄漏
发表于2016-12-29
| 导语 Allocations能够精确记录未释放内存的申请之处,结合一起已知信息,能够快速精确查找内存泄漏和内存使用情况。
本文档基于Xcode 8.2.1,未测试低版本的是否支持
主要步骤如下:
准备工作
内存快照
快照分析
代码分析与解决问题
问题验证
准备工作
用Xcode调试游戏,打开Instruments中的Allocations,选择运行中的程序:
或者,直接直接用Allocations选择运行已安装的程序
点击红色按钮,开始分析
内存快照
点击 Mark Generation可以抓取内存快照
快照分析
常用的内存泄露查找方法是获取不同时间点的内存快照,然后对比内存快照,从内存快照的差异中找出可能的内存泄露对象。
每个快照/Generation都有Growth和Persistent信息
Growth:表明当前快照比上一个快照新增长了多少内存,展开可以查看到底是哪些新对象。
Persistent:表明这些新的分配的对象中,还有哪些对象是在打最近一次堆内存快照的时候依然存在的。
内存快照也可以用来分析内存使用情况。
假定我们现在要查某一玩法的内存泄漏。过玩法前抓取会内存快照A,进入玩法后,玩一段时间,造成内存泄漏,退出场景,再抓取会内存快照Scene1。为了便于分析,再进出别的玩法,再抓取会内存快照Scene2。
此时,再去看内存快照Scene1的情况,如下图中标记为fish的快照。点击箭头进入详情(一定要进入详情,否则是盲人摸象)。
详情如下:
一步一步查看内存占用比例较高的调用,如:
基本可以怀疑QGPakFile存在内存泄漏
代码分析与解决问题
点右键,跳到Xcode 代码实现
分析代码,可以确定此处的内存泄漏
问题验证
修改代码,验证此内存泄漏已经修复
重复以上步骤,解决不同的内存泄漏问题。