在actionscript 3中,我动态创建了添加EventListeners的对象。这些对象将添加到数组中,以后可能会再次删除。其他人可能会在以后再添加。每次我创建一个对象时,我都会将这些EventListeners添加到它们中。但是,在删除这些对象时是否还需要删除这些事件侦听器?当我丢失对对象的所有引用但不删除这些EventListeners时会发生什么?它们是否存在于内存中,无法访问且不可用,或GC是否将其清理干净?
答案 0 :(得分:4)
是的,如果您没有使用弱引用,则必须删除事件侦听器。如果对象有引用,GC将不会清理对象,并且注册事件侦听器会创建对该对象的引用,除非您将useWeakReference
参数(5 th 参数设置为注册事件监听器时addEventListener
方法)到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);
答案 1 :(得分:0)
当你在一个对象上有事件监听器时,你永远不会丢失对它的所有引用,所以它将无限期地保留在内存中。您需要确保始终删除所设置的任何侦听器。您可以使用弱引用来设置它们,但这不是一个真正的解决方案,最好明确地删除它们。