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