重复多次地add和remove之后,每次操作都变得非常卡。
进断点调试之后发现,这个显示对象上被我添加了好几万个listener。
看了一下自己写的窗口基类的代码
this.on("added", onAddToParent);
function onAddToParent(event) {
//do sth. on added
_this.off("added", onAddToParent);
_this.on("removed", onRemoveFromParent);
}
function onRemoveFromParent(event)
{
//do sth. on removed
_this.on("added", onAddToParent);
_this.off("removed", onRemoveFromParent);
}
发现off并没有起作用,只有on在不断地添加侦听,所以每次侦听的数量都以2次方的速度增长。。。。
又去翻了一下api,发现off on 和add/removeEventListener 的用法是不一样的。
add/remove 是和as3一样
但是on/off 是创建了一个匿名函数,这个函数包住了我们传进去的侦听回调函数,然后通过调用这个匿名函数来执行回调,所以在off的地方把我们创建的回调函数当参数并没有用。要把on方法返回的参数,也就是它自己创建