1.首先我写了两个测试类:
package test01 { import flash.events.MouseEvent; import flash.utils.Dictionary; import flash.display.Sprite; /** * @author */ public class MultiMovieClipTest extends Sprite { private var _dict : Dictionary; var _wy:WangYong; public function MultiMovieClipTest() { initData(); this.stage.addEventListener(MouseEvent.CLICK, click); } private function click(event : MouseEvent) : void { trace("===>",_wy); } private function initData() : void { _dict = new Dictionary(false); for (var i : i nt = 0; i < 10; i++) { if(i == 0){ _wy = new WangYong(); _dict[_wy] = new WangYong(); }else{ _dict[new WangYong()] = new WangYong(); } } } } }
package test01 { /** * @author */ public class WangYong { } }
接着通过概要分析来开始观察WangYong这个实例的数量变化;
2.第一种观察(如代码中的:new Dictionary(false));
此时观察的结果如下:
第二种观察(_dict = new Dictionary(true););
此时观察的结果如下:
然后不停的点击强制垃圾回收的按钮,一会后结果又如下:
3.总结:
我就直接把API文档拷过来了:
指示 Dictionary 对象在对象键上使用“弱”引用。 如果对某个对象的唯一引用位于指定的 Dictionary 对象中,则键符合垃圾回收的条件,并且在回收对象时会被从表中删除。所以在使用时还是要当心的。。
ps:1.如果在使用_dict = new Dictionary(true),同时没有定义成员变量var _wy:WangYong;,那么输出的结果实例数就会是0个了。
2.如果Dictionary的key是基本类型数据,那么也不会自动回收。