Apr 27

ActionScript3 deleteで悩む

Flash コメントはページの下に

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 パラメータを削除できない場合、delete 演算子は処理できないため false を返します。固定プロパティまたは var ステートメントで宣言された変数は削除できません。固定プロパティとは、クラス定義で定義される変数またはメソッドです。」

あ、確かに。んじゃ関数内で一時的に使うような変数はvarを使わなければいいのか?
という問題でもないです。

a:Object とやったところでsealed変数になっているとのこと。
http://www.gskinner.com/blog/archives/2006/06/understanding_t.html

deleteが使える変数は?

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 ガーベジコレクション

前後の記事

関連した記事

トラックバック&Pingback

この記事が気に入ったりした方は、自分のブログを書くときに「下のURLをコピーして、自分のブログ投稿時のトラックバック欄にペースト」してください。つながります。
URL:

  1. 小山太郎.com » Blog Archive » ActionScript3 メモリ解放 Says:

    […] 先日のActionScript3 deleteで悩むに関することなんですが。 […]

コメント ( 0 )

コメント記入欄

Copyright(c) 小山太郎.com All rights reserved.