是否必须删除弱引用的侦听器才能进行垃圾收集?即使它们被弱引用也是删除侦听器的好习惯还是我们可以指望垃圾收集器适当地处理它们?
答案 0 :(得分:1)
您不必手动删除弱侦听器,以便对它们进行垃圾回收。不注销侦听器会导致您遇到的大部分内存泄漏,因此使用弱侦听器可以显着提高程序的稳定性。
但是,为了防止弱侦听器在您准备好之前被删除,您必须至少有一个强引用(或使用实例方法)。这通常意味着监听器需要保留的任何内容,直到删除了父类引用。这使得监听器的持续时间与拥有监听器的实例一样长,这是组件最常见的情况。
在某些情况下,您必须管理听众,即如果您打算不听父母的整个生命。可能你想要删除监听器,然后在以后添加它,不常见,但它会发生。这就是弱听众与强大的参考听众没有任何优势的地方。
一旦删除了对它的强引用,垃圾收集器将快速删除弱侦听器。弱听众使清理变得更加简单。虽然人们都很谨慎,因为我相信你会听到,因为弱听众对UI框架来说是相当新的。当GC被添加到主流语言时,大多数人也对此过于谨慎。
我们依靠GC来清理内存,它可以运行并生成更稳定的代码,而现在人们并没有称之为邋code的代码。弱听众没有任何不同。
答案 1 :(得分:0)
我自己从不使用弱引用,但是当我不再需要它时,我非常小心地删除所有听众。我认为最好习惯于总是删除监听器而不是使用弱引用。
事件侦听器中的弱引用选项主要是为了您 不必手动删除事件侦听器。我个人倾向于 不要使用它,因为我喜欢完全控制对象何时获得 标记为垃圾收集。
Clarifications regarding weak references in actionscript listeners
http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/
答案 2 :(得分:0)
这正是弱引用侦听器的重点 - 您并不需要将它们移除以进行垃圾收集。
但是,不应滥用此功能作为编写草率代码的方法。你应该只在你自己无法正常清理的情况下依赖它们。如果您可以预测您何时完成侦听事件,则应使用强引用的事件侦听器并在完成后将其删除。