ActionScript3では、固定プロパティではなく動的プロパティのみdeleteが利用できる。
って、専門用語に弱い自分としては「なんのこっちゃ?」というところ。
実際に例を挙げると
var xml:XML = new XML();
delete xml;
これでエラー。がでます。1189:固定プロパティxmlを削除しようとしています・・・
さて、C++をかじった人間としては
「なんで出来ないんじゃーー!!」と言いたいところ。
実際、検索していると同じように思っている人は多い。
gskinner.com: gBlog AS3: Resource Management pt 1
var a:Object = {foo:”bar“} // the object now has a reference count of 1 (a)
var b:Object = a; // now it has a reference count of 2 (a & b)
delete(a); // back to 1 (b)
delete(b); // down to 0, the object can now be deallocated by the GC
と書いてありますがエラーがしっかり出てきますっと。(赤字)
ヘルプのdelete 演算子には
「 reference パラメータを削除できない場合、 演算子は処理できないため deletefalse を返します。固定プロパティまたは var ステートメントで宣言された変数は削除できません。固定プロパティとは、クラス定義で定義される変数またはメソッドです。」
あ、確かに。んじゃ関数内で一時的に使うような変数はvarを使わなければいいのか?
という問題でもないです。
a:Object とやったところでsealed変数になっているとのこと。
http://www.gskinner.com/blog/archives/2006/06/understanding_t.html
var t:Object = new Object();
t.name = “koyamataro”;
delete t.name; //成功
delete t; //失敗
わかりますかね?動的の意味が。
tはObjectクラスであって、Objectクラスってのは不変。
だけどt.nameに入れた”koyamataro”って一時的なものであって変化できる(動的)でしょ。
ってのが自分の中で解決してしまったこと。
でもねぇ・・・newしたObject自体はいつ破棄されるのさ?
クラスメンバにした変数を何回か呼ばれる関数でnewしたりしたら・・・
この辺はECMAScriptをよく読めってことか・・・
akihiro kamijo: Flash Player 9 ガーベジコレクション
この記事が気に入ったりした方は、自分のブログを書くときに「下のURLをコピーして、自分のブログ投稿時のトラックバック欄にペースト」してください。つながります。
URL:
5 月 1st, 2008 at 1:50:02
[…] 先日のActionScript3 deleteで悩むに関することなんですが。 […]