1

このオープンソースプロジェクトLoadingSpinnerから次のコードスニペットを見つけまし

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イベントが複数回発生することを意味しますか?

4

1 に答える 1

2

リスナーを削除する唯一の理由は次の
とおりです。イベントリスナーがクラスのインスタンスにアタッチされている限り、そのリスナーは、ディスパッチャから削除されるまで、またはディスパッチャがガベージコレクション。つまり、アプリケーションをステージから削除して明示的にに設定した場合でも、アプリケーションが実行されている限り、メモリ内に存在し続けますnull
そのため、イベントリスナーが不要になった場合は、常にクリーンアップすることをお勧めします。メモリリークを回避できます。

于 2012-12-28T02:39:36.840 に答える