ガベージ コレクターは継続的に動作するわけではないため、まだ動作していない可能性があります。最後に、ハンドラーの呼び出しを停止する必要があります。そうでない場合は、おそらく別の参照があります。
以下の例を実行すると、null に設定されていて弱い参照があるtimer
にもかかわらず、無期限にトレースされていることがわかります。ただし、 (デバッグ プレーヤーを使用して) 行のコメントを解除してガベージ コレクターを強制的に実行すると、ハンドラーは呼び出されません。handler
EventDispatcher
System.gc()
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.system.System;
import flash.utils.Timer;
public class TimerTest extends Sprite {
private var timer:Timer;
public function TimerTest() {
var handler:Function = createHandler();
timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, handler, false, 0, true);
timer.start();
handler = null;
//System.gc();
}
private function createHandler():Function {
return function(e:Event):void {
trace('timer');
};
}
}
}
一般に、プログラムの正しい動作のためにガベージ コレクターに頼るべきではありません。