加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:29:09 所属栏目:百科 来源:网络整理
导读:谈弱引用前,先说说as3的垃圾回收。看了一些介绍,加上自己的一些理解,现在对as3的垃圾回收有一定理解了。(下面的一段话引用自其它博客) ?????????? 在Flash Player初始化运行时,会向操作系统申请一大块内存,如果程序很小,有可能根本用不了这么多内存
谈弱引用前,先说说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

}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读