2011-01-23 7 views
0

イベントリスナーを削除する必要がある場合、をどうやって知っていますか?例えばイベントリスナーをいつ削除しますか?

、私はTimerEventリスナーを持っている場合、私は停止および/または私のタイマーを削除したとき、私は無事にそのイベントを削除することができることを知っています。

それとも、私はステージ上の表示オブジェクトを持っている、と私はそれを削除した場合、私は安全に表示オブジェクトに関連付けられたすべてのイベントリスナーを削除することができます。

他の例はありますか?

答えて

5

イベントリスナーを削除するには2つの理由があります

  1. あなたは、もはや何らかの理由でイベントを受信したいが。これはかなり簡単です。あなたのコードはリスニングされ、オフになります。

  2. あなたはオブジェクトで行われ、あなたはそれがゴミを収集することにしたいです。これはより微妙なものですが、正しく実行されないと実際のメモリリークにつながる可能性があります。観測者が観測リスナーにイベントリスナーを追加すると、オブザーバーはオブザーバーへの参照を保持します。このため、オブザーバへの参照を解放し、ガーベッジ・コレクションを取得すると思うが、オブザーバブルがまだ生存している場合は参照できない。観察者はリスナーをいつリリースするかを知ることができないので、効果的にメモリリークが発生しました。あなたのコードには明示的な参照がないので、それをアンフックすることはできません。また、オブザーバブルはそれをもっとうまくやってくれません。オブジェクトを完全に参照解除してガベージコレクションを適切に行うには、イベントリスナーを削除する必要があります。

関連する問題