あなたのコードを見ると、私は間違いなくを推奨します。です。共有したコードがアプリケーション全体で一度しか実行されない場合を除き、おそらくメモリリークが発生します。
イベントリスナーをオブジェクトに追加すると、そのイベントリスナーはガベージコレクションの準備ができていても(それ以上使用されていなくても)オブジェクトをメモリに保持します。匿名関数(おそらくProxy.add
から返されるもの)をイベントリスナーに追加すると、イベントリスナーを簡単に削除できません。d.removeEventListener(MouseEvent.CLICK, Proxy.add(this, click, d))
を実行するとProxy.addは新しい/別の関数を返すため、機能しません
弱フラグ(5番目のパラメータ)にtrue
を渡すことができますが、これは、リスナーを追加したときと同じですが、リスナーを追加したときと同じです。あなたのリスナーを追加するとき:
frとするオブジェクトを考え出すリスナーを無視するのFlashPlayerを伝え
d.addEventListener(MouseEvent.CLICK, Proxy.add(this, click, d), false, 0, true);
メモリからのee。これによりメモリリークの可能性は低くなりますが、依然として非常にクリーンな方法ではありません。常に弱フラグを使用するか、不要になったときには常に明示的にリスナーを削除することをお勧めします。
コメントや他の回答で示唆したように、あなたが実際にあなたのProxyクラスを使用する必要はありません、以下はあなたが好きなものを達成するでしょう:
d.addEventListener(MouseEvent.CLICK, click, false, 0, true);
private function click(event:MouseEvent):void {
Animate.fadeOutIn(event.currentTarget as Sprite);
//event.currentTarget is a reference to the Object that you attached the listener to
//event.target is the object that actually dispatched the event, which could be the same as event.currentTarget, or a child of it
}
あなたに超簡単な例を追加できますあなたの質問には、使用したいクラス構造が含まれます –
私は例を追加しました。 – seventeen
あなたの例では、関数に 'elem'を渡す必要はありません。 'event.currentTarget'または' event.target'から取得できます –