我在构造函数中有这个:
addEventListener(Event.REMOVED_FROM_STAGE, actualDestroy);
这在realDestroy中:
public function actualDestroy(e:* = null){
removeEventListener(Event.REMOVED_FROM_STAGE,actualDestroy);
if(this.parent){
this.parent.removeChild(this);
}
}
问题是我得到错误:错误#2094:事件调度递归溢出。如果this.parent不存在,为什么removechild会被调用?为什么不删除事件侦听器?
答案 0 :(得分:3)
该事件的名称具有误导性。根据文档,removedFromStage
是“当显示对象即将从显示列表中删除”时“调度”。换句话说,这就是您的代码中发生的事情:
parent.removeChild(this)
actualDestroy
。此时,对象仍在显示列表中,因此this.parent != null
actualDestroy
,您再次致电parent.removeChild(this)
。所以要解决这个问题,你可能想要重构你的代码(从显示列表中删除自己的对象无论如何都不是一个好主意),或者可能使用像beingRemoved
之类的布尔来检查对象是否是已从列表中删除。在这种情况下,请勿在{{1}}中致电parent.removeChild(this)
。