其实资源释放不难,难的是姿势要优雅,只要做好规定,并一切按照规定来,资源可以精准的释放
- 官方在资源释放上已经做了一套相对比较好的 “自动释放” 策略,但是自动释放策略仍然存在限制,然而对于多场景少预制的项目而言,直接使用 官方的 "自动释放"策略 依然可以完美并优雅的解决资源释放问题
简单描述一下官方释放策略 目测采用标记法:
-
以场景(包括常驻节点)作为执行环境,在执行环境中的资源不释放
-
手动标记(setAutoRelease)的资源不释放
如此你只要做好在动态加载资源后手动标记好这个资源是否随场景切换而自动释放就可以了。值得一提的是,假如你当前场景没有标记自动释放策略,那么手动标记在当前场景的切换是无效的。
阅读引擎自动释放代码 engine/cocos2d/core/load-pipeline/auto-release-utils.js 有感,自写了一套资源管理,目前已经初步完成,正在进一步接受项目检验 目测一周后 开源或者 发布到商店
目前可以做到解放双手 让资源完全自动释放,你所要做的就是像使用 js 一样,只要做好让对象(资源)的引用置空,比如销毁一个 node.destroy() node.parent = null 等手段让节点脱离场景 如果某资源有且仅被该 node 持有,稍后该资源将被自动收集到释放队列 可以由队列自动消化,也可以手动调用接口立即释放
如果喜欢自动回收,你可以调用直接调用 释放接口 释放一个 url 或者 cc.Asset 资源 无须关系你要释放的资源是否被其他对象持有,当调用立即释放接口或者被队列自动释放时,内部会检查被释放资源是否某对象持有,从而判断是否释放该资源
由于对释放几乎没有什么硬性限制,本人到目前为止还没有想好一个最好的释放姿势,另外代码还在测试和优化阶段,成熟后会公布出来