浅谈as3侦听器的弱引用和事件回收

谈弱引用前,先说说as3的垃圾回收。看了一些介绍,加上自己的一些理解,现在对as3的垃圾回收有一定理解了。(下面的一段话引用自其它博客)

           在Flash Player初始化运行时,会向操作系统申请一大块内存,如果程序很小,有可能根本用不了这么多内存,但FP在开始时不考虑这些,大多数情况下,第一次申请的内存总是不够用的。第一次申请的内存大小,与操作系统、浏览器环境有关。当Flash Player发现已经申请的内存不够用时,它会再向操作系统申请一大块内存。但在申请之前,请注意,FP会尝试进行垃圾内存回收。那么它是如何回收的呢?Flash Player在内部使用懒惰式引用计数回收方案进行垃圾内存回收,懒惰式指:FP并不会一次把所有可以回收的对象全部回收,它一次仅会回收一部分,如果内存不够用,它会向操作系统申请,如果系统无内存了,它会再次回收,如果全部回收了仍不够用,Game Over!引用计数指:FP在内部给每个对象标记一个记号,当没有任何对象引用此对象时,它即是可以被回收的;如果一个容器内有许多相互关联的对象,当把这个容器从显示列表中移除,并且置为null后,它也是可以被回收的。

            下面谈弱引用。弱引用的最大作用是,当程序员创建了某个监听器,但是忘记了销毁或者没有去刻意销毁,如果这个监听器的引用是弱引用,那么当这个监听器在被使用完毕之后,经过一定的周期,会被系统自动删除,从而节省资源。提及弱引用,肯定会联系到as3的垃圾回收机制,从弱引用就可以看出,as3的垃圾回收机制做的是非常好的。我经常会听到有人说,as3是目前封装的非常完美的一门语言。但是,系统的垃圾回收工作肯定不是及时的,有时间上的延迟,它不能做到在你使用完侦听器的第一时间去销毁它,所以也不应过于依赖弱引用去移除侦听事件,还是要在程序中去调用removeEventListener()在侦听器使用完毕后去人为的移除。一个简单的非常能体现这种使用完毕就销毁的思想的例子:

stage.addEventListener(KeyboardEvent.KEY_DOWN,key_Press);//为舞台添加一个键盘按下的事件,初学时容易把键盘事件的添加对象搞错

function key_Press(e){

stage.removeEventListener(KeyboardEvent.KEY_DOWN,key_Press);//第一时间释放KEY_DOWN的侦听

//当然,这里可以写KEY_DOWN事件发生后的东西

stage.addEventListener(KeyboardEvent.KEY_UP,key_Release);//添加一个KEY_UP事件,构成循环

}

function key_Release(e){

stage.removeEventListener(KeyboardEvent.KEY_UP,key_Release);//第一时间释放侦听

stage.addEventListener(KeyboardEvent.KEY_DOWN,key_Press);//当KEY_UP 之后,继续侦听KEY_DOWN

}

使用完毕,就销毁掉,这段代码非常具有代表性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值