动态加载资源 释放时要注意 引入引用计数统计
今天开发时,释放了预制体资源引起报错,这里直接使用了bundle.release
因为预制体的精灵图片是动态加载的,释放时将精灵图片一并释放了,引起错误
改为引用计数,解决问题
cocos资源释放文档:https://docs.cocos.com/creator/manual/zh/asset/release-manager.html
资源的动态引用
资源的动态引用 当开发者在编辑器中没有对资源做任何设置,而是通过代码动态加载资源并设置到场景的组件上,则资源的引用关系不会记录在序列化数据中,引擎无法统计到这部分的引用关系,这些引用关系就是动态引用。 如果开发者在项目中使用动态加载资源来进行动态引用,例如: resources.load('images/background/spriteFrame', SpriteFrame, function (err, spriteFrame) { self.getComponent(Sprite).spriteFrame = spriteFrame; }); 此时会将 SpriteFrame 资源设置到 Sprite 组件上,引擎不会做特殊处理,SpriteFrame 的引用计数仍保持 0。如果动态加载出来的资源需要长期引用、持有,或者复用时,建议使用 addRef 接口手动增加引用计数。例如: resources.load('images/background/spriteFrame', SpriteFrame, function (err, spriteFrame) { self.getComponent(Sprite).spriteFrame = spriteFrame; spriteFrame.addRef(); }); 增加引用计数后,可以保证该资源不会被提前错误释放。而在不需要引用该资源以及相关组件,或者节点销毁时,请 务必记住 使用 decRef 移除引用计数,并将资源引用设为 null,例如: this.spriteFrame.decRef(); this.spriteFrame = null;