2011-02-01 21 views
0

ドキュメントクラスにdestroy/disposeメソッドが必要ですか?ドキュメントクラスのメソッドを破棄/破棄

- removes event listeners 
- stops timers 
- nulls class variables 

またはその他のオブジェクトでは、私が必要とするこれだけのものである:

は、私は、次の

- mouse event listeners 
- timers running and or enter_frame listeners 
- class variables 

私は破壊や処分方法を持っている必要がありますを持っているドキュメントクラスを持っていると言います(スプライト、ムービークリップ)は、Documentクラスのステージに追加されますか?

答えて

3

一般に、ドキュメントクラスによって表されるオブジェクトは、アプリケーションが有効である限り存続するため、このようなメソッドは必要ありません。しかし、必ずしもそうではありません。たとえば、「スタブ」swfsがある場合は、アンロード時にそれらをクリーンアップすることができます。呼び出し側はswf(Flash Player> = 10の場合)をロードしたローダーでunloadAndStopを呼び出すことができますが、それでもクリーンアップすることは良い考えです。

これを行う簡単な方法は、ADDED_TO_STAGEイベントとREMOVED_FROM_STAGEイベントを利用することです。つまり、オブジェクトがステージに追加されるたびに、必要なすべての初期化を実行します。それが取り除かれたら、あなたの清掃をしてください。

import flash.display.MovieClip; 
import flash.events.Event; 

public class YourDocClass extends MovieClip { 

    public function YourDocClass() { 
     addEventListener(Event.ADDED_TO_STAGE,setup); 
     addEventListener(Event.REMOVED_FROM_STAGE,cleanup); 
    } 

    private function setup(e:Event):void { 
     // your setup code here 
    } 

    private function cleanup(e:Event):void { 
     // your cleanup code here 
    } 
} 

これら2つのイベントリスナーを削除する必要はありません。事実、イベントを聴いているだけのままにしておけば、オブジェクトを再利用することができます(オブジェクトを一貫性のある状態に保つために少しでも注意が必要な場合もあります)。新しいインスタンスを使用する方がはるかに簡単で、あなたが取るヒットは問題ではない)

3

クラスのインスタンスが「破棄」されることが多い場合は、一般的にはdispose()メソッドを使用することをお勧めします。 Flashにはfinalize()がありません(Javaとは異なります)ので、クリーンアップする場所が必要です。クリーンアップする必要があるもの

  1. タイマーが
  2. 停止する必要があります実行「のenterFrame」イベントリスナーを削除する必要があります
  3. オープンネットワーク接続が
  4. でも子供が追加閉じる必要がありますステージを削除する必要があります
  5. ステージイベントリスナーを削除する必要があります
  6. BitmapDataオブジェクトを削除する必要があります
  7. サウンド再生を停止する必要があります。

...など。

メモリリークが深刻化する可能性があります。

関連する問題