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