AS3:初始化期间弱的监听器引用不合适?

时间:2010-04-19 07:11:41

标签: actionscript-3 garbage-collection weak-references addeventlistener

正如我目前所理解的,如果将事件侦听器添加到useWeakReference设置为true的对象,则它有资格进行垃圾收集,并且当垃圾收集执行扫描时将被删除。

public function myCustomSpriteClass() //constructor
    {
    this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener, false, 0, true);
    this.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener, false, 0, true);
    }

在这种情况下,是否不适合初始化具有弱引用事件侦听器的对象,因为垃圾收集器确实激活扫描删除对象事件侦听器,因为它们是在对象初始化期间添加的?

在这种情况下,是否只适合创建一种deallocate()方法,该方法在对象无效之前删除事件侦听器?

1 个答案:

答案 0 :(得分:4)

弱事件侦听器仅表示侦听器不计入垃圾收集例程,例如。如果一个对象没有其他指针而是强大的事件隐藏者,那么它将不会被GC收集,如果它只有弱引用,那么它将被删除。

GC不会删除事件侦听器本身,如果它们是弱或强,则必须以相同的方式删除它们,但是如果对象无效,则应自动删除弱引用的侦听器。

个人认为,弱听众的使用促进了不良做法,因为您不再需要实际考虑使用哪些资源,尽管它们在某些情况下很有用。我会有一个清理脚本来删除它在无效之前运行的监听器。 although there are evangelists for both sides(如果你仍感到困惑,他可能会解释得更好)

- 编写了更明确的意义 -