1

私が現在理解しているように、useWeakReferenceがtrueに設定されたオブジェクトにイベントリスナーが追加された場合、そのイベントリスナーはガベージコレクションの対象となり、ガベージコレクションがスイープを実行すると削除されます。

public function myCustomSpriteClass() //constructor
    {
    this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener, false, 0, true);
    this.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener, false, 0, true);
    }

この場合、ガベージコレクターがオブジェクトの初期化中に追加されたため、オブジェクトイベントリスナーを削除するスイープをアクティブ化する場合に備えて、弱参照イベントリスナーを使用してオブジェクトを初期化することは適切ではありませんか?

この場合、オブジェクトが無効になる前にイベントリスナーを削除するタイプのdeallocate()メソッドを作成することだけが適切でしょうか?

4

1 に答える 1

4

弱いイベントリスナーは、リスナーがガベージコレクションルーチンでカウントされないことを意味するだけです。オブジェクトに他のポインターがなく、強いイベントリスナーがある場合、GCによって収集されません。弱い参照しかない場合、オブジェクトは削除されます。

イベントリスナー自体はGCによって削除されません。弱いまたは強い場合は同じ方法で削除する必要がありますが、オブジェクトが無効になっている場合、弱い参照リスナーは自動的に破棄されます。

個人的には、弱いリスナーを使用すると、特定の状況では役立ちますが、実際に使用しているリソースについて考える必要がなくなるため、悪い習慣が助長されると思います。無効化する前に実行するリスナーを削除するためのクリーンアップスクリプトがあります。両方の側に伝道者がいますが(そしてあなたがまだ混乱しているなら彼はそれをよりよく説明するかもしれません)

-より明確な意味を持つように編集-

于 2010-04-19T09:07:46.050 に答える