释放资源到底做了什么?感觉好像没什么用的?

onLoad: function () {
let spr = null;
cc.loader.loadRes(“aa/aa”, cc.SpriteFrame, (err, spr)=>{
cc.log(err);
cc.loader.releaseRes(“aa/aa”, cc.SpriteFrame);
setTimeout(()=>{
cc.log(“b”);
let frame = this.node.getComponent(cc.Sprite);
frame.spriteFrame = spr;
}, 3000);
});
},

这是我的代码,我在加载完成后。里面就释放了,然后等3秒后再赋值给精灵。
问题就是这个精灵居然还是可以显示出来,也没有报错。
释放了,不是应该无法显示的吗?

对某些系统级的资源来说,释放后确实是用不了的。例如纹理、音频。对 SpriteFrame 来说,释放后只是让你的资源可以被 GC,如果你仍然持有引用,那么 GC 就不会发生,你要再次使用确实是可以的。不过如果你下次又加载相同资源,那么引擎就会再生成一份相同的 SpriteFrame 对象。

对于SpriteFrame 来说,我可以理解为。
如果动态加载,就是说,这个资源会在cc.loader里面加上,而释放的操作,只是删除cc.loader里面相关的引用。
如果释放了,但在当前场景还是持有这个引用,那么暂时不会被释放,但切换场景后,这个引用应该也会被自动释放的?

是的,没错。

不过如果你下次又加载相同资源,那么引擎就会再生成一份相同的 SpriteFrame 对象。

那假如再生成一份相同的spriteframe 对象 ,不就内存泄漏了么。 之前永远释放不了?

公共资源就别释放了

之前的引用赋为空就会释放

反正给我的感觉就是cc没办法释放资源

程序员 1 就是 1,2 就是 2