ActionScript 3: 是否需要移除事件监听器?

3
在ActionScript 3中,我动态创建对象并向其添加EventListeners。这些对象被添加到数组中,可能稍后会被删除,也可能稍后再次添加。每次创建一个对象时,我都会向它们添加这些EventListeners。然而,当删除这些对象时,是否需要删除这些事件侦听器呢?当我失去对一个对象的所有引用但不删除这些EventListeners时会发生什么?它们会留在内存中无法访问和使用,还是GC会清理它们?
2个回答

4

如果您没有使用弱引用,那么必须删除事件侦听器。如果存在对对象的引用,GC将不会清理它,并且注册事件侦听器确实会创建对该对象的引用,除非在注册事件侦听器时将useWeakReference参数(addEventListener方法的第5个参数)设置为true。弱引用不会被垃圾回收器计数。

//Using strong reference: needs to be removed by calling removeEventListener
sprite.addEventListener(Event.TYPE, listenerFunction, useCaptureBool, 0, false);

//Using a weak reference: no need to call removeEventListener
sprite.addEventListener(Event.TYPE, listenerFunction, useCaptureBool, 0, true);

0

当您在对象上有事件监听器时,您永远不会失去对它的所有引用,因此它将无限期地保留在内存中。您需要确保始终删除您设置的任何侦听器。您可以使用弱引用来设置它们,但这并不是真正的解决方案,最好明确地将它们删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接