为什么需要在其处理程序中删除创建完整的侦听器?

时间:2012-12-28 02:13:17

标签: flex

我在这个开源项目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次?

1 个答案:

答案 0 :(得分:2)

删除听众的唯一原因是:
只要事件监听器附加到类的实例,该监听器就永远不会被垃圾收集"直到它从调度员中删除,或直到调度员也有资格进行垃圾收集。即,只要应用程序运行,它就会保留在内存中,即使您将其从舞台中删除并明确将其设置为null。 这就是为什么在不再需要事件监听器时总是清理事件监听器的好习惯。您可以避免内存泄漏。