[0]Node.ts 节点销毁之后为什么要注释掉 timer 的清理操作。

 
/**
* <p>销毁此对象。destroy对象默认会把自己从父节点移除,并且清理自身引用关系,等待js自动垃圾回收机制回收。destroy后不能再使用。</p>
* <p>destroy时会移除自身的事情监听,自身的timer监听,移除子对象及从父节点移除自己。</p>
* @param destroyChild (可选)是否同时销毁子节点,若值为true,则销毁子节点,否则不销毁子节点。
*/
destroy(destroyChild: boolean = true): void {
this.destroyed = true;
this._destroyAllComponent();
this._parent && this._parent.removeChild(this); 
//销毁子节点
if (this._children) {
if (destroyChild) this.destroyChildren();
else this.removeChildren();
}
this.onDestroy(); 
this._children = null; 
//移除所有事件监听
this.offAll(); 
//移除所有timer
//this.timer.clearAll(this);
}
1645703641746.jpg
已邀请:

之肖

赞同来自: Yan

因为this.timer指向的可能是Laya.timer,如果清除timer上的所有事件,可能导致无法预测的错误

1645703437用户

赞同来自:

我发现计时器会在最终回调的时候回去 检测caller 是不是已经销毁,如果发现已经销毁,就去clear(), 但是这样的话就会导致如果我的计时器时间比较长,当caller 销毁的时候他空跑了好多帧。你们为什么要在这个地方注释掉呢。是直接销毁的时候会有什么问题么。

151*****309

赞同来自:

因为timer有一个自管理的update函数,这个函数每帧执行,会自动检测handler是否可回收,当可回收时会自动回收

QQ浏览器截图20220225115738.png


QQ浏览器截图20220225115642.png

 

要回复问题请先

商务合作
商务合作