我测了你的用例,没有问题
差别在于,我添加了一个手动 GC 的按钮来测试是否能够被释放。
你需要知道的是,在不手动 GC 的情况下,你有可能看到内存很高的情况,这不意味着内存泄漏了,只是 GC 还没有被触发,这点并没有什么奇怪的。只要 GC 能够将这些内存释放掉,就说明这些内存没有泄漏,是被 JS 引擎所正确管理的垃圾内存。使用 JS 的时候你可能没办法那么有效得控制内存,也不用强求,你需要关注的是游戏本身运行的效率和体验。
补充一点,我们并不建议频繁对 Loader 中的缓存进行清理操作,只要在你的游戏中持续有用的资源,请一定要用 setAutoRelease
和 setAutoReleaseRecursively
跳过,否则频繁加载和删除同样的资源,就会产生上面图中的内存表现,这些算是 best practice 的 tips。