■吉里吉里/KAG/TJS雑談質問スレ■その5
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
04/09/15 02:43:06ID:lnIfU+bZ本家BBSで聞きづらい質問や初歩的な質問などでもよいのでわからないことがあればどうぞ。
自分のゲームの進行状況や製作ツール等についての話、TJS等の質問もお待ちしています。
マルチポストはやめましょう。個人叩きも禁止です。
4(タイトルは3) http://pc5.2ch.net/test/read.cgi/gamedev/1081199649/
3 http://pc5.2ch.net/test/read.cgi/gamedev/1067436686/
2(再利用) http://pc2.2ch.net/test/read.cgi/gamedev/1044256119/
1 http://pc2.2ch.net/test/read.cgi/gamedev/1021890648/
【公式】
kikyou.info
http://kikyou.info/
吉里吉里ダウンロードページ
http://kikyou.info/tvp/
0815名前は開発中のものです。
2005/03/29(火) 23:10:22ID:cyi4fg8k状況による。
delete は変数名を undefined 状態に戻す。
invalidate は代入されてるオブジェクトの無効化フラグを立てる。
(GCにコレ消しても大丈夫よって教えるのね)
23:03:13 コンソール : tf.dic = new Dictionary(); = (object)(object 0x01F04F98:0x01F04F98)
23:03:24 コンソール : tf.dic.layers = new Array(); = (object)(object 0x01F0EF50:0x01F0EF50)
23:03:48 コンソール : tf.layers = tf.dic.layers; = (object)(object 0x01F0EF50:0x01F0EF50)
だから delete の場合、参照が他所に残ってたらオブジェクトも残る。
23:04:00 コンソール : delete tf.dic; = (int)1
23:04:06 コンソール : tf.dic = (void)
23:04:09 コンソール : tf.layers = (object)(object 0x01F0EF50:0x01F0EF50)
invalidate の場合でも、根元の辞書配列型が無効化されるだけなので要素オブジェクトは健在。
( tf.dic.layers 経由のアクセスが不可能になるだけ )
23:07:41 コンソール : invalidate tf.dic; = (int)1
23:07:49 コンソール : tf.dic = (object)(object 0x01F23008:0x01F23008)
23:07:58 コンソール : tf.dic.layers = (例外発生)オブジェクトはすでに無効化されています
23:08:09 コンソール : tf.layers = (object)(object 0x01F23608:0x01F23608)
0816名前は開発中のものです。
2005/03/29(火) 23:18:24ID:cyi4fg8k普通GCはオブジェクトの参照カウンタが0になったら勝手に働くので、
(吉里吉里のVMがどう働くのかは知らないけど、普通は、ね)
メモリ大量に食うから早く消して欲しいオブジェクトとか
メモリは食わないけど数が沢山あるオブジェクトなんかを invalidate すると○。
大本を invalidate するなり delete するなりすれば要素変数名も勝手に消えるので、
辞書配列なり配列なりの各要素に対して delete するのは超無意味。
辞書配列なり配列なりの各要素に対して invalidate したい場合は再帰を使うと○。
function recursiveInvalidate( obj ) {
/**/
/**/ if( typeof( obj ) != "Object" ) return;
/**/ else if( obj instanceof "Dictionary" ) recursiveInvalidate( ( new Array() ).assign( obj ) );
/**/ else if( obj instanceof "Array" ) {
/**//**/
/**//**/for( var i = 0 ; i < obj.count ; i++ ) recursiveInvalidate( obj[ i ] );
/**/ }
/**/ invalidate obj;
}
こんな感じかな。
■ このスレッドは過去ログ倉庫に格納されています