关于 资源的释放 我希望的是放肆 而不是限制

其实资源释放不难,难的是姿势要优雅,只要做好规定,并一切按照规定来,资源可以精准的释放


  • 官方在资源释放上已经做了一套相对比较好的 “自动释放” 策略,但是自动释放策略仍然存在限制,然而对于多场景少预制的项目而言,直接使用 官方的 "自动释放"策略 依然可以完美并优雅的解决资源释放问题

简单描述一下官方释放策略 目测采用标记法:

  1. 以场景(包括常驻节点)作为执行环境,在执行环境中的资源不释放

  2. 手动标记(setAutoRelease)的资源不释放

如此你只要做好在动态加载资源后手动标记好这个资源是否随场景切换而自动释放就可以了。值得一提的是,假如你当前场景没有标记自动释放策略,那么手动标记在当前场景的切换是无效的。


阅读引擎自动释放代码 engine/cocos2d/core/load-pipeline/auto-release-utils.js 有感,自写了一套资源管理,目前已经初步完成,正在进一步接受项目检验 目测一周后 开源或者 发布到商店


目前可以做到解放双手 让资源完全自动释放,你所要做的就是像使用 js 一样,只要做好让对象(资源)的引用置空,比如销毁一个 node.destroy() node.parent = null 等手段让节点脱离场景 如果某资源有且仅被该 node 持有,稍后该资源将被自动收集到释放队列 可以由队列自动消化,也可以手动调用接口立即释放
如果喜欢自动回收,你可以调用直接调用 释放接口 释放一个 url 或者 cc.Asset 资源 无须关系你要释放的资源是否被其他对象持有,当调用立即释放接口或者被队列自动释放时,内部会检查被释放资源是否某对象持有,从而判断是否释放该资源


由于对释放几乎没有什么硬性限制,本人到目前为止还没有想好一个最好的释放姿势,另外代码还在测试和优化阶段,成熟后会公布出来

4赞

mark

mark一下

有点矛盾 我感觉还是官方的释放方式比较合理 内存控制是因为官方不支持etc1 etc2 现在该有的差不多都有了 可以节省很多内存 你能想到的问题 官方已经基本帮你考虑了一遍了

是的,你说的有道理,看了引擎代码后,官方是有能力补全目前资源释放方面的不足的,但是到目前为止官方只提供了比较简单的基于场景的自动释放策略,但是这个策略无法满足广大的开发者的需求,对于单场景多预制的开发需求这个策略几乎无法轻松的实现资源的准确释放,需要对整个项目的资源管理做很多硬性规定。所以我的意思再加粗部分已经说了,使用官方自动释放策略并不是不能用,而且不能跟别人轻松随意的用

想问一下现在怎么样了,同样单场景多预制的需求

项目自用中,没什么问题,但是还没有整理出来

大佬整理出来了吗?很多人都需要这种单场景多预制的资源管理