2008年02月06日

Flash CS3 を普段なーんも考えずに使っていますけど。
なんか、アップデイトされてますね。
System.gc とかいうガーベッジコレクタを強制発動するメソッドが追加されてました。
CS3 でも使えるって知ってましたか?
僕は知りませんでした。(ダメ)

実際の製作物内に使うことは、あまりないかもしれませんが
これで挙動をチェックしたりできますね。
(そもそも、デバッグモードでしか動かないとかあるかな?)

というわけで、実験!実験!
まずは、function の中の変数は、function が終了した時点で GC の餌食になるのを見てみます。

テキトーに、test_mc というインスタンス名の MC を作って置いてください。
んで、コレ。

import fl.transitions.Tween;
import fl.transitions.easing.None;

var testTween:Tween;
GCdemo();
// System.gc();

function GCdemo():void {
  var testTween:Tween =
    new Tween(test_mc,'y',None.easeNone,0,100,1,true);
}

単純にTweenで、MCが、0から100まで動くサンプルですが
System.gc(); をコメントインすると動かなくなります。
function が最後まで流れた時点で、testTween オブジェクトが GC されるから。

グローバルに持たせておくと、GC されません。

import fl.transitions.Tween;
import fl.transitions.easing.None;

var testTween:Tween = GCdemo();
System.gc();

function GCdemo():Tween {
  return(new Tween(test_mc,'y',None.easeNone,0,100,1,true));
}


addChild されてる、表示オブジェクトも GC されません。
(ちゃんとStageからの一連の表示リストに入ってないとアウト)
以下、TestMC クラスはライブラリ内にテキトーに作っておいて。

GCdemo();
System.gc();

function GCdemo():void {
  var testMC:TestMC = new TestMC();
  addChild(testMC);
}


どうでしょう?
相変わらず、あんま役に立たなそうな情報ですが。
まぁ、自分で試してください。

UPDATE3 は、結構いろいろありますね。
Flash Player 9.0.115.0 は、大きめのリリースでして。
今後の Security Update Phase2 ってのが怖いトコロです。
別途、気が向いたら書きます。

(00:42)

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔