在 actionscript 3 中,我动态创建对象并向其添加 EventListener。这些对象被添加到数组中,稍后可能会再次被删除。其他人可能会在以后再次添加。每次我创建一个对象时,我都会将这些 EventListeners 添加到它们中。但是,删除这些对象时是否也需要删除这些事件监听器?当我丢失对某个对象的所有引用但不删除这些 EventListener 时会发生什么?它们是留在内存中的某个位置,无法访问且不可用,还是 GC 会清理它们?
最佳答案
是的,如果您不使用弱引用,则必须删除事件监听器。如果存在对对象的引用,GC 将不会清除该对象,并且注册事件监听器会创建对该对象的引用,除非您设置 useWeakReference
参数(第 5 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);
关于actionscript-3 - ActionScript 3 : Do you need to remove EventListeners?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004983/