ActionScript中的弱引用的使用

弱引用从原则上来讲,是为了防止无意识的对象保留引起的内存泄露

在ActionScript中的强弱引用往往是指在使用Dictionary类时和侦听器和事件中。

一、Dictionary类

Dictionary 类是用于创建属性的动态集合,该集合使用全等运算符 (===) 进行键比较。将对象用作键时,会使用对象的标识来查找对象,而不是使用在对象上调用 toString() 所返回的值。

在Dictionary类的构造方法中有:

public fuction Dictionary(weakKeys:Boolean = false){
}    

其中参数weakKeys:Boolean(default = false)指的是创建的该对象是否为弱引用类型,如果是则键符合垃圾回收的条件,并且在回收对象时会被从表中删除。如果不是则垃圾回收机制不会自行处理,则通过人为的方式处理!

二、侦听器中的弱引用

在使用ActionScript2开发时经常用完事件后就忘了移除侦听器对象,这将消耗系统的资源,也是我们最常见的诡异的bug种类之一。

若侦听器设置为弱引用,而且在程序运行时只剩下了这个弱引用指向侦听器,这是垃圾回收机器可以不理它,直接就把侦听器回收了。

三、事件中的弱引用

我在设置添加侦听器时如下:

this.addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):

其中第五个参数useWeakReference即可以指定对侦听器的引用是强引用还是弱引用,强引用可防止侦听器被当作垃圾回收,弱引用没有此作用(也就是说垃圾回收机制会处理弱引用的对象)。如果所使用的侦听器在其他地方没有被引用,只剩下addEventListener()为他注册的弱引用时,该侦听器就会被当作垃圾,在下一次垃圾回收机制工作周其中回收掉,从而节省资源!

*注意提示

由于垃圾回收机制工作不是即时的,有周期性的延迟,所以我们一般不应当依赖于弱引用属性来移除侦听器,在销毁之前这个侦听器还会继续存在、继续作用。所以,一般情况下当我们使用完侦听器后,就直接调用removeEventListener()方法移除侦听器!

posted @ 2013-11-04 23:10  重庆-崽崽  阅读(234)  评论(0编辑  收藏  举报