2010年2月18日木曜日

DisplayObject におけるデストラクタ呼び出し

ActionScript にはデストラクタがなかったはずですが、ちゃんと EventListner をクリアしておかないと、GCの対象にならずにメモリを食いつぶすことがあります。デストラクタがあれば、そこに removeEventListener 関係の仕込を入れておくのですが、残念ながらないと。かといって、都度デストラクタ関数を呼び出すのも面倒です。

で、DisplayObject については、コンテナから remove されたときにイベントを発行してくれるので、Event.REMOVED_FROM_STAGE を設定しておけばいい感じだと思います。remove した displayObject インスタンスを再利用するつもりなら、この限りではないのでご注意を。

package {
 
 import flash.display.Sprite;
 import flash.events.Event;
 
 public class Hoge extends Sprite
 {
  public function Hoge():void 
  {
   addEventListener(Event.REMOVED_FROM_STAGE, 
    function(e:Event):void {
     removeEventListener(Event.REMOVED_FROM_STAGE, arguments.callee);
     destruct();
    }
   );
  }
  
  public function destruct():void 
  {
   // remove...remove...delete...remove...
  }
 }
}

Event.REMOVED_FROM_STAGE も、忘れず remove しておきましょう。

0 件のコメント:

コメントを投稿