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

わたしゃいまだ未使用です。