AS3 - 使用addEventListener参数

时间:2014-05-14 13:03:22

标签: actionscript-3 flex flex4

现在我正在使用AS3开发Flex 4。在大多数情况下,我使用 addEventListener 。      此侦听器默认参数为 type:String,listener:Function,useCapture:Boolean = false,priority:int = 0,useWeakReference:Boolean = false 。但大多数开发人员并未考虑最后3个论点。但我想知道这三个论点的用法吗?

有人打电话告诉我回答吗?

1 个答案:

答案 0 :(得分:3)

大多数时候这三个最后的参数都不是必需的,因为通常最好使用编程模式来管理依赖项,而不是将其留给难以调试的意大利面条代码,这些代码通过许多其他类。

然而,他们有一个目的,他们可以派上用场:

  • useCapture - 为事件的捕获阶段注册具有事件目标的祖先的侦听器 在dispatch中,我们将addEventListener()的第三个参数useCapture设置为true,如:

    theAncestor.addEventListener(myEvent,MyListener, true );

    代码导致MyListener()被执行,只要AS3在该后代收到事件通知之前调度myEvent,其目标是其中一个祖先的后代。

  • priority - 如果向对象添加多个事件侦听器,则将首先触发具有更高优先级的事件侦听器。如果添加两个或多个具有相同优先级的侦听器,则首先添加的侦听器将首先触发。想象一下,在创建一个对象时,你已经添加了一个事件监听器,但是稍后您需要添加另一个,并且您希望首先运行该新对象。以更高的优先级注册它应该可以解决问题。

  • weakReference - 这不是常用的,因为Flash的垃圾收集器可以在任何时间运行,甚至从不运行。问题是,无论是否使用弱引用,对象都可以继续分派和监听事件,直到它被垃圾收集。

    默认情况下,注册侦听器的对象 对于给定事件,在对其进行显式取消注册之前,会保留对该侦听器的引用 对于该事件 - 即使没有其他对侦听器的引用仍留在程序中。

    通过将值设置为 true ,当对象符合垃圾回收条件时,对象将失去对侦听器的引用。

    它用于防止内存泄漏,但只有在侦听器对象的生命周期比调度程序更短时,useWeakReference才有效。理解如何使用它是一个好主意,但在实践中我避免使用它,只需在我的类中编写一个方法来删除所有添加的侦听器。