博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈as3侦听器的弱引用和事件回收
阅读量:4106 次
发布时间:2019-05-25

本文共 1327 字,大约阅读时间需要 4 分钟。

谈弱引用前,先说说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

}

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

转载地址:http://qrjsi.baihongyu.com/

你可能感兴趣的文章
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day12 集合
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>