浅谈as3侦听器的弱引用和事件回收
来源:互联网 发布:日本三次元口罩 知乎 编辑:程序博客网 时间:2024/06/08 06:13
在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
}
使用完毕,就销毁掉,这段代码非常具有代表性。
- 浅谈as3侦听器的弱引用和事件回收
- Flash AS3事件侦听器
- as3.0 强,弱引用,垃圾回收,事件机制
- 跨浏览器的事件侦听器和事件对象
- AS3 事件中的弱引用
- Android事件侦听器回调方法浅谈
- Android事件侦听器回调方法浅谈
- 通用的事件侦听器函数
- 通用的事件侦听器函数
- 通用的事件侦听器函数
- js--事件--通用的事件侦听器函数
- js--事件--通用的事件侦听器函数
- HasEventListener和willTragger检查事件侦听器
- 一个简单的组件事件侦听器
- 写一个通用的事件侦听器函数?
- 写一个通用的事件侦听器函数
- AS3的垃圾回收
- AS3的垃圾回收
- Linux自动登陆的设置方法
- HttpClient在使用中有两个超时时间
- ===和==有什么区别
- SAP内存/ABAP内存/共享内存区别(收集来的)
- ubuntu12.04通过网络复制文件夹到WindowsXP的方法
- 浅谈as3侦听器的弱引用和事件回收
- 使用equals时犯得错
- 用ABAP实现SM36的设置后台JOB
- linux内核添加系统调用
- chrome 收藏夹的设置
- 那些年朋友劝,该知道的ASP.NET -如何在HTML/后台,中调用另一个js文件中的方法
- codeblocks default.conf
- As3中强引用和弱引用比较
- jar包链接的源码,中文注释为乱码的解决方法