ActionScript 3 Tweenerとメモリ問題(ガベージコレクション)

もはや必須のライブラリーTweener。気をつけないとメモリ問題ではまります。

以下、kaniくんより

●まずはFlashのガベージコレクション(メモリーの掃除)の基本
つくったものをステージからremoveChildする
その際にaddEventListenerしていたらremoveEventListenerをする
これで参照が無くなるのでガベージコレクションの対象になる
特定のタイミングでガクッとメモリの使用量が減る

サンプルファイルをダウンロード(Adobe Flash CS4/ActionScript3)

Tweenerクラスとガベージコレクションの対象
addChildしたインスタンスがTweenerを使ってループアニメを使った場合、ガベージコレクションの対象にならない
なぜならTweenerクラスが静的クラスなのでFlashPlayerのグローバルな領域にいてインスタンとの参照が切れないためメモリリークが発生する

サンプルファイルをダウンロード(Adobe Flash CS4/ActionScript3)

しばらく実行しているとその内fpsが1に近づいてカクカクになっていきます。

●上記のインスタンスをガベージコレクションする方法
インスタンスのremoveChildのタイミングで、TweenerのremoveTweensを実行して現在実行中のアニメを取り除く
これにによって参照からはずすことができる

サンプルファイルをダウンロード(Adobe Flash CS4/ActionScript3)

出力ウィンドウを見てもらうとガクッとメモリの使用量が減ります。

はまりやすい罠ですな