什么意思?麻烦
cc.loader.setAutoReleaseRecursively(prefab, true) 无法释放资源,只是允许被自动释放。你遇到的问题应该是动态加载的 prefab 是不会被场景切换自动释放的。这里的逻辑是这样的:如果用户手动加载一个资源,引擎并不知道什么时候用户不再需要这个资源了,所以无法决定自动释放的时机。
对于手动加载的资源需要自行手动释放:
var deps = cc.loader.getDependsRecursively(resUrl);
cc.loader.release(deps);
除此之外,如果 prefab 引用的贴图资源被场景其他部分,或者其他资源所共享,那么你需要清除所有的资源引用之后才可以有效释放。否则只会从 loader cache 中删除,并不会真正释放,这会导致下次重新加载的时候,增加内存的使用。这里的根本原因是 JS 层无法跟踪对象的引用,所以实现不了引用计数机制。
总结一下:
- auto release 是针对场景所依赖的资源在切换场景过程中进行释放
- 用 cc.loader.loadxxx 手动加载的资源,都必须手动管理资源的引用,并手动释放
了解了, 图集和dragbone的资源终于释放掉了
。 感谢
我在native上还是无法释放。
我的做法:
//释放标记过的资源(releaseUuid是保存uuid的数组)
//动态加载的时候加入 releaseUuid.push(atlas._uuid);
releaseRes() {
for(let i in releaseUuid){
cc.loader.setAutoReleaseRecursively(releaseUuid[i], true);
var deps = cc.loader.getDependsRecursively(releaseUuid[i]);
cc.log(deps);
cc.loader.release(deps);
}
cc.loader.releaseAll();
},
把需要释放的资源在加载的时候记录下来,在却换场景的时候调用使用函数,这个在web端是可以的,贴图也已经释放掉了

但是在native上释放了以后还是在(内存也没降低)
顶一下 求回答。
没人有相同的问题吗。 求
同样问题,早前我也认为是有泄露,1.2没有问题,1.4内存让人担忧。手动试过gc,内存是正常了,不过会引发偶发crash,只能去掉gc。
我的操作方式:
xcode联机调试,然后来回切换一个界面,每次都会涨一点,涨了很多次之后,突然一下内存曲线就掉下来了,接着再试几次还在涨,不管它,几分钟之后回来发现内存曲线峰值又掉了一半。
creator的gc是在底层自动进行 港真,我不知道这是好事还是坏事。
这是和浏览器中 JS 表现尽量一致的一种方式,所以 GC 一定是有延迟的,内存的增长也会符合 Chrome 的 task manager 记录的游戏页面内存使用状况。
如果希望用 1.2 的内存模型,需要在 ccConfig.h 中修改 CC_ENABLE_GC_FOR_NATIVE_OBJECTS 为 0,这可能会导致一些 Invalid Native Object 问题,此时需要用 retain release 去手动管理一些 C++ 对象的生命周期。
这两种模式的本质区别是:
CC_ENABLE_GC_FOR_NATIVE_OBJECTS 为 1:由 JS 对象的生命周期控制 CPP 对象的生命周期,只有 JS 对象被 GC,C++ 对象才会释放
CC_ENABLE_GC_FOR_NATIVE_OBJECTS 为 0:CPP 对象完全依赖 C++ 层的引用计数,而 JS 对象依赖 GC 。
这里的一个大前提是:JS 对象生命周期是无法手动控制的,必须依赖 JS 引擎的 GC
我是通过场景脚本挂载prefab,然后cc.instantiate出实力的,将prefab设置成 cc.loader.setAutoReleaseRecursively(prefab, true);场景切换后内存还是越来越大
都那么多版本,还是解决不了内存问题么。
create 的内存问题的确让人很蛋疼,对内存管理这块官方也没有个很好的说明,我们公司开发的一款棋牌类游戏,生成native包大小不到40M,很少地方用到动态加载资源的地方,都是通过资源管理器拖进去的资源,场景也选择了资源自动释放,但场景切换后内存基本没咋减少,貌似上个场景的资源就没释放,都说js的GC有延迟性,但是等了一段时间还是一样,内存没咋变化,@panda 希望官方能有内存优化这方面的文档
请描述具体的平台,可以的话附上你们的demo,已知的是微信安卓会有GC不释放的问题,还在等微信这边处理。
creator1.52 、js,实现截图功能,截图成功后用cc.loader.release释放了资源,频繁连续截图,内存只增不降,手动gc后,内存降下来了,继续操作会导致崩溃。iOS上有这个问题,安卓上频繁连续截图,内存不会有太大变化。各位大大,请问这个怎么解?