代码之家  ›  专栏  ›  技术社区  ›  rinogo

为什么as3在默认情况下不使用弱引用?(事件侦听器)

  •  2
  • rinogo  · 技术社区  · 15 年前

    对addEventListener()的调用中weakreference的默认值为false。许多记忆问题可以通过使用weak references来解决;事实上,一些行业专家“强烈建议总是使用弱引用与听众”。

    如果是这样的话,有人能给我一个很好的理由解释为什么weakreference默认为true吗?(注意,我不是在问为什么有人会想要一个不是Weakreference的听众,而是为什么Weakreference=false是默认值)

    谢谢!:)

    2 回复  |  直到 15 年前
        1
  •  1
  •   Maic López Sáenz    15 年前

    另一个原因可能是侦听器机制的日期可以追溯到没有垃圾收集因而没有弱引用的时候。在那些日子里,侦听器与匿名函数一起使用是很常见的,因此对此类函数的唯一引用就是侦听器。随着语言的发展和弱引用特性的添加,预计默认行为将与目前使用的行为相同,这不是弱引用。

    因此,简而言之,当添加弱引用时,到目前为止,仍然可以预期侦听器的默认行为是相同的。因此,弱引用是另一种选择,而不是违约。

    由于今天的弱引用,在侦听器中使用此类匿名函数将在添加函数后立即被删除,根本没有任何作用(可能会破坏许多新旧代码,这取决于侦听器的强引用)。

        2
  •  5
  •   Anon.    15 年前

    对修改对象外部状态的事件侦听器使用弱引用会导致不可预测的行为。如果您将它留给GC来删除这些侦听器,那么您不知道它什么时候会这样做。

    在处理完对象后,您应该确保自己删除事件侦听器-因此,您希望开发 没有 弱的听众,这样当你忘记做的时候就很明显了,而不是被垃圾收集器覆盖。