内存泄漏是游戏中常见的问题,根本原因就是对象被引用从而导致对象无法释放,下面就详细说明下内存泄漏的常见原因及如何排查解决。
常见原因
- 监听未移除导致的内存泄漏
- 数组及字典添加后未移除
- 全局变量及静态变量有对象的引用
- 容器中的子元素尚未移除并释放
- 对象未从父容器移除并在显示列表中
- 闭包及回调参数中有对象的引用
排查方式
内存泄漏的主要排查方式就是对比内存快照,通过对比2个时间点对象的创建及释放数量就很容易排查出哪里存在内存泄漏的问题,
Chrome DevTools 是分析内存泄漏的利器,EgretWing及Chrome都自带这个工具。
预防方案
- 每个对象都应该有一个destory方法,并在destory内部释放掉对象内的变量、数组、子对象及监听
- 谨慎使用闭包及回调函数中的参数,如有引用需要及时解除引用
- 所有容器在释放时都需要移除容器内的子对象
- 所有可显示对象在释放时都需要从父容器移除