1

我从这个开源项目Loading Spinner中找到了以下代码片段

public function Spinner() {
    super();
    addEventListener(FlexEvent.CREATION_COMPLETE, handleCreationComplete);
}


private function handleCreationComplete(e:FlexEvent):void {
    removeEventListener(FlexEvent.CREATION_COMPLETE, handleCreationComplete);
    if (autoPlay) {
        play();
    }
}

为什么需要 removeEventListener 行?这是否意味着一个 creationComplete 事件将被触发超过 1 次?

4

1 回答 1

2

删除侦听器的唯一原因是:
只要事件侦听器附加到类的实例,该侦听器永远不会被“垃圾收集”,直到它从调度程序中删除,或者直到调度程序也有资格垃圾收集。即,只要应用程序运行,它就会一直存在于内存中,即使您将其从舞台上移除并且您明确将其设置为null.
这就是为什么在不再需要事件侦听器时始终清理它们是一种很好的做法。您可以避免内存泄漏。

于 2012-12-28T02:39:36.840 回答