dynamicクラス Dictionary
前出のCairngorm2.2 DataServicesクラスにてDictionaryが使用されてたのでそれについて。
dynamicクラスなのでプロパティやメソッドを動的に作成できます。
で、
Dictionaryクラスでは、
プロパティの動的なコレクションを作成でき、キーの比較に厳密な等式(===)を使用できるとのこと。
以下は本家リファレンスより引用
http://livedocs.adobe.com/flex/2_jp/langref/
var dict = new Dictionary(); var obj = new Object(); var key:Object = new Object(); key.toString = function() { return "key" } dict[key] = "Letters"; obj["key"] = "Letters"; dict[key] == "Letters"; // true obj["key"] == "Letters"; // true obj[key] == "Letters"; // true because key == "key" is true b/c key.toString == "key" dict["key"] == "Letters"; // false because "key" === key is false delete dict[key]; //removes the key
使い方はこんな感じだそうです。
結論は、
Dictionaryは、オブジェクトのキーを使用できるマップです。
キーにも値にもオブジェクトを使用できます。
で、メモリ的にちょっとコツが必要っぽくて
たとえば、以下のような感じで使用した場合において、
import flash.utils.Dictionary; var myObject:Object = new Object(); var myMap:Dictionary = new Dictionary(); myMap[myObject] = "foo";
(本家Adobe liveDocsからソース拝借)
myObjectをガベージコレクションの対象にしたい場合は
myObject = null;
とする必要があると。
マップ(Dictionary)からもDeleteしないと参照が残るわけです。
使うとき注意!!ですね。
ところで、Dictionaryに関するこの内容は
LiveDocsの書いてる事を鵜呑みにしてるので、ちゃんと検証してみて下さいw
わたしゃいまだ未使用です。