使用cc.loader.loadRes加载了本地的Prefab后,使用cc.loader.getDependsRecursively和destroy释放。但是发现内存并没有释放。
请问下cocos creator关于动态创建prefab后应该如何正确的释放内存。
使用cc.loader.loadRes加载了本地的Prefab后,使用cc.loader.getDependsRecursively和destroy释放。但是发现内存并没有释放。
请问下cocos creator关于动态创建prefab后应该如何正确的释放内存。
同样遇到这个问题!
有大神知道的吗
这个不是释放内存啊,这个只是释放资源。
另外,为什么要 this.node.destroy()?这样会把你挂这个脚本的节点销毁的。
遇到同样问题,官方也一直没有解释.
现在是动态创建出prefab,后要销毁它,并回收内存。
请问应该如何操作
你先确认 this.node 是什么啊。。。
你现在是想销毁这个 prefab,但你这个操作是销毁 this.node
this.node是通过prefab创建出来的
额,我还是没看懂this.node是怎么来的。。
我直接贴代码吧
`cc.Class({
extends: cc.Component,
properties: {
btn1:{ //添加按钮
default:null,
type:cc.Button
},
btn2:{ //关闭按钮
default:null,
type:cc.Button
}
},
// use this for initialization
onLoad: function () {
this.btn1.node.on('click',this.CreatePanel,this);
this.btn2.node.on('click',this.ClosePanel,this);
},
CreatePanel: function () {
var scene = cc.director.getScene();
cc.loader.loadRes("UI/pf", function (err, prefab) {
var pf = cc.instantiate(prefab);
pf.parent = scene;
pf.position = cc.v2(300,300)
});
},
ClosePanel: function () {
if(cc.director.getScene().getChildByName("pf")){
cc.director.getScene().getChildByName("pf").removeFromParent(true);
var deps = cc.loader.getDependsRecursively('UI/pf');
cc.loader.release(deps);
this.scheduleOnce(function(){ //5秒后 强行释放内存
cc.sys.garbageCollect();
},5)
}
},
});
`
同问,官方没解释
他释放资源后,内存释放是有延时性的,如果想要马上释放需要自己手动。
后面那段 5秒后 强行释放内存 就是。
非常感谢,翻了墙之后查到了,
强制调用cc.sys.garbageCollect();