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 件のコメント:
コメントを投稿