FC2ブログ
googleで
カスタム検索
プロフィール

けろ&ひな

Author:けろ&ひな
大阪在住。
親ばか。
最近、転職したよ。でも、やってることは一緒なんだけどね。;-P

最近の記事
カテゴリー
月別アーカイブ
最近のコメント
最近のトラックバック
スポンサード リンク

スポンサーサイト--------(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[flash lite2.0][as2]setIntervalが実行されない・・・2009-11-18(Wed)

先日作ったClockクラスを別クラスから呼び出す形でテストしてて気づいた。

ClockクラスのstartClockメソッドを別クラスからキックするとstartClockメソッド内のsetIntervalが実行されてない。。。

実行されてない状態のときのmainはこんな感じで呼び出してた。
・・・
private function hoge():Void {
var clock:Clock = new Clock();
clock.startClock();
}

この状態だと、clock.startClock()は見た目は正常に実行される。
だけど、startClock内にあるsetIntervalは実行されていない。
ちなみにstartClock内のsetIntervalは
・・・
private var intervalId:Number;
public function startClock():Void
{
intervalId = setInterval(this, "fuga", 100);
}

みたいな感じ。

なんでかはよく分からないけど、clock.startClock()をDelegateする形で実行するとsetIntervalも正常に実行される。
うーん、、、"this"が思ったところを指していないのだろうか。。。
小一時間ほど、悩んでみた。
・・・
var func:Function = function(){trace("test");}
intervalId = setInterval(func, 100);

上のようにsetIntervalのところを無名関数にして動かしてみると動く。
てことは、setIntervalから呼び出す関数がどうも参照できていない(?)っぽい。
てことで、mainのほうの変数「clock」を外に出してみた。
・・・
private var clock:Clock
private function hoge():Void {
clock = new Clock();
clock.startClock();
}

としてみると、、、動いた。

うーん、、、
勝手な想像だけど、clockが内部変数になってたことでclock.startClockからsetIntervalが実行されても実際にIntervalで関数が実行されたときにはclock変数がメモリから開放されてしまって実行されなくなってたのかなぁ???そうだとしたら、かなり残念な気もするからきっと違うんだろう。。。

まぁ、何が原因かは不明だけど結果オーライ解決かな?

教訓:setIntervalをクラスメソッドで使用するときは、そのクラスのインスタンスはクラス変数で持て。

ということで。
関連記事

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

コメント

工事中
RSSフィード
リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。