子资源的引用计数会自动加1 这个是引擎内部的机制 是吧?那么主动画释放后,所属的子资源计数 也会相应的减1,所以 如果子资源没有被其他方式引用 也就被自动释放了 ?
你好,有个疑问,动态更换SpriteFrame,如果多次load,那我每次load之前都得获取现有纹理decRef, 然后赋值新的再addRef,这样不是很繁琐吗
我觉得你的后端思维没有很敏捷,估计你是纯前端。虽然我很想给你讲明白,但是我懒得打字,总的来说你还不是很明白资源与资源之间的关系
一堆人对着"我看过文档"的人讲文档
还想叫醒装睡的人
这个貌似必须要这样做。旧的要decRef, 新的要addRef。
其实大多数情况下,你不需要 addRef 和 decRef,你动态加载的资源赋值给 node 的组件后,你不用 addRef,这个资源会随着 node 的销毁而被释放,具体释放可能不是立即的,但是不用你去关心.需要你addRef的情况是你知道这个资源不需要释放,因为还会被别的地方使用,文档上也写了,需要长期持有的时候才使用的,觉得繁琐的话你可以写个管理类,第一次加载资源的时候addRef一次,然后存到这个管理类上,别处使用的时候从管理类上取,然后真正需要释放的时候decRef一次,就不用关心到底哪个几次了,有没有成对调用了
增加引用计数后,可以保证该资源不会被提前错误释放。而在不需要引用该资源以及相关组件,或者节点销毁时,请 务必记住 使用 decRef 移除引用计数,并将资源引用设为 null ,例如:
this.spriteFrame.decRef();
this.spriteFrame = null;
我是说这一句。
我也没有深入去研究
应该是释放不是立即,具体的释放实机我也不清楚,
如果你想立即就要释放,你可以试试
cc.assetManager.release 系列接口(例如 release 、 releaseAsset 、 releaseAll )会直接释放资源,而不会进行释放检查,只有其依赖资源会进行释放检查。所以当显式调用 release 系列接口时,可以确保资源本身一定会被释放。
这个释放时机我也是不清楚。我切换场景(设置了自动释放资源)也没有释放。


