Xcode内存泄漏

发表于2016-12-29
评论0 2.5k浏览
| 导语 Allocations能够精确记录未释放内存的申请之处,结合一起已知信息,能够快速精确查找内存泄漏和内存使用情况。

本文档基于Xcode 8.2.1,未测试低版本的是否支持

主要步骤如下:

准备工作

内存快照

快照分析

代码分析与解决问题

问题验证

准备工作

Xcode调试游戏,打开Instruments中的Allocations,选择运行中的程序:

或者,直接直接用Allocations选择运行已安装的程序

点击红色按钮,开始分析

 

内存快照

点击 Mark Generation可以抓取内存快照

快照分析

常用的内存泄露查找方法是获取不同时间点的内存快照,然后对比内存快照,从内存快照的差异中找出可能的内存泄露对象。

每个快照/Generation都有GrowthPersistent信息

Growth:表明当前快照比上一个快照新增长了多少内存,展开可以查看到底是哪些新对象。

Persistent:表明这些新的分配的对象中,还有哪些对象是在打最近一次堆内存快照的时候依然存在的。

内存快照也可以用来分析内存使用情况。

假定我们现在要查某一玩法的内存泄漏。过玩法前抓取会内存快照A,进入玩法后,玩一段时间,造成内存泄漏,退出场景,再抓取会内存快照Scene1。为了便于分析,再进出别的玩法,再抓取会内存快照Scene2

此时,再去看内存快照Scene1的情况,如下图中标记为fish的快照。点击箭头进入详情(一定要进入详情,否则是盲人摸象)

详情如下:

一步一步查看内存占用比例较高的调用,如:

基本可以怀疑QGPakFile存在内存泄漏

代码分析与解决问题

点右键,跳到Xcode 代码实现

分析代码,可以确定此处的内存泄漏

问题验证

修改代码,验证此内存泄漏已经修复

重复以上步骤,解决不同的内存泄漏问题。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: