弱引用的侦听器是否必须被删除才能发生垃圾收集?即使它们被弱引用,或者我们可以指望垃圾收集器恰当地处理它们,是不是很好的做法?AS3:弱引用必须被删除?
回答
您不必手动删除弱听者,以便对垃圾进行垃圾回收。不注销监听器会导致大部分内存泄漏,所以使用弱监听器可以显着提高程序的稳定性。
但是,为了防止在准备好之前删除弱听者,必须至少有一个强引用(或使用实例方法)。这通常意味着无论注册侦听器需要保留它,直到父类的引用已被删除。只要实例拥有组件最常见的侦听器,就会使侦听器持续下去。
有些情况下您必须管理监听器,那就是如果您计划不听父母的整个生活。可能的情况下,你想删除侦听器,然后在稍后添加它,不常见,但它发生。这就是弱听者对强大的参考听众没有任何优势。
垃圾收集器将删除微弱的侦听器,一旦强引用删除。弱听者使清理更简单。虽然人们很谨慎,但我相信你会听到,因为弱听者对于UI框架来说相当新颖。当GC被添加到主流语言时,大多数人也对此过于谨慎。
我们依靠GC来清理内存,这可以工作并且使代码更加稳定,而且现在人们不会调用那些草率的代码。弱听者没有什么不同。
我从来没有使用弱引用,但我非常小心地删除所有听众,当我不再需要它们时。我认为最好养成一种习惯,总是要去掉听众而不是使用弱引用。
事件侦听器中的弱引用选项主要是为了让您 不必手动删除事件侦听器。我个人倾向于 不使用它,因为我喜欢完全控制对象获取 标记为垃圾回收。
Clarifications regarding weak references in actionscript listeners
http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/
这正是弱引用听众的点 - 你不严格需要将它们删除了垃圾收集发生。
但是,这个功能不应该被滥用作为一种手段来编写草率的代码。只有在自己无法正确清理的情况下,才应该依靠它们。如果你可以预测你什么时候会完成一个事件的监听,那么你应该使用一个强引用的事件监听器,并在完成后将其删除。
- 1. C++必须删除一个引用?
- 2. 实体必须设法调用删除
- 3. Mysql外键,必须在引用表或键中匹配删除?
- 4. as3 array按索引删除
- 5. 我是否必须删除此对象? (如果我不打算被删除)
- 6. 删除as3中的movieclip引用
- 7. Flash AS3错误:增量的1106操作数必须是引用
- 8. 是否必须单独删除外键/索引,如果你打算删除表
- 9. mysql 5.1分区 - 我必须删除索引/键元素吗?
- 10. 我必须删除@Override注释吗?
- 11. 记忆新的INT [10]必须删除[]
- 12. 计时器必须保持删除
- 13. 我们是否必须删除QUpdSockets?
- 14. 我必须删除这些指针吗?
- 15. 我必须通过jQuery删除父div
- 16. 必须删除意向演员吗?
- 17. FLASH/AS3:删除孩子时出错。参数子项必须为非零
- 18. as3儿童不会被删除
- 19. AS3 POST返回值'+'已被删除
- 20. 如果元素被删除,我是否必须清除DOM中的事件?
- 21. 用指针删除列表也是必须清除的对象
- 22. 删除子AS3
- 23. MySQL - 必须被捕获或被宣布引发
- 24. 参数孩子必须在AS3
- 25. AS3:参数子项必须为非空
- 26. AS3 stage.addChild/stage.removeChild <<必须呼叫者
- 27. 如何从列表中删除弱引用?
- 28. MySqlDataReader将必须被关闭
- 29. 由getExternalCacheDir()创建的文件被自动删除或应用程序必须明确删除
- 30. Lua弱引用
使用强引用侦听器的好处是什么?我在某处读到最好总是使用弱引用:[link](http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html) – Abdulla