2010年2月18日木曜日

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

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

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

  1. package {  
  2.    
  3.  import flash.display.Sprite;  
  4.  import flash.events.Event;  
  5.    
  6.  public class Hoge extends Sprite  
  7.  {  
  8.   public function Hoge():void   
  9.   {  
  10.    addEventListener(Event.REMOVED_FROM_STAGE,   
  11.     function(e:Event):void {  
  12.      removeEventListener(Event.REMOVED_FROM_STAGE, arguments.callee);  
  13.      destruct();  
  14.     }  
  15.    );  
  16.   }  
  17.     
  18.   public function destruct():void   
  19.   {  
  20.    // remove...remove...delete...remove...  
  21.   }  
  22.  }  
  23. }  

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

0 件のコメント:

コメントを投稿