对addEventListener()的调用中weakReference的默认值为false。使用weakReferences可以解决许多内存问题;事实上,一些行业专家“强烈建议总是在听众中使用弱引用”。
如果是这种情况,有人能为我提供一个很好的理由说明为什么weakReference默认为true? (请注意,我不是在问为什么有人会想要一个不是weakReference的监听器,而是为什么weakReference = false是默认值)
谢谢! :)
答案 0 :(得分:5)
在修改对象外部状态的事件侦听器上使用弱引用会导致不可预测的行为。如果你把它留给GC来删除那些听众,你根本不知道它什么时候会这样做。
当你完成对象时,你应该确保自己删除事件监听器 - 因此,你想要开发而不用弱的监听器,这样当你忘记做的事情就很明显了而不是它被垃圾收集器掩盖。
答案 1 :(得分:1)
另一个原因可能是侦听器机制的日期从没有垃圾收集的时候开始,因此没有弱引用。在那些日子里,与匿名函数一起使用的监听器是常见的,因此对于这样的函数的唯一引用将在监听器中。随着语言的发展和弱参考特征的增加,预计默认行为将与目前使用的行为相同,并且不是弱引用。
因此,简而言之,当添加弱引用时,仍然期望侦听器的默认行为与目前使用的相同。所以弱参考是替代,而不是默认。
对于今天的弱引用,在侦听器中使用这样的匿名函数最终会在添加函数时立即删除它,完全没有任何用处(并且可能会破坏很多代码,无论是旧的还是新的,哪些取决于听众的强烈参考。