1

removeEventListener 是否与 dealloc 一样必要?

我知道在 AS3 中可能会出现内存泄漏,我只是想知道不删除事件侦听器是否是其中一种方法。

4

2 回答 2

4

是的,因为您将一个实例“绑定”到另一个实例的范围内。因此,当错误地处理事件时,您将在整个应用程序中获得交叉引用,并且垃圾收集器将找不到任何可以从内存中释放的对象。

于 2012-06-04T07:47:26.090 回答
4

是的,我创建了一个巨大的项目,没有删除任何 eventListener,并且在长时间使用后它确实获得了很多内存......

任何具有强引用的对象都不会被垃圾收集,直到强引用被删除......这适用于事件监听器,绑定等......

您可以使用removeEventListener(Event.TYPE, function) 或使用weakReference手动删除EventListener ...

使用 Wea​​kReference 添加事件侦听器您只需向 addMethod 添加更多参数...

obj.addEventListener(Event.Type, Function, false, 0, true)

addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void

参数:
type事件的类型。
listener处理事件的监听函数。此函数必须接受一个事件对象作为其唯一参数,并且不得
返回任何内容,如下例所示:
function(evt:Event):void

该函数可以有任何名称。
useCapture确定侦听器是在捕获阶段还是在目标和冒泡阶段工作。如果 useCapture 设置为 true,
则侦听器仅在捕获阶段而不是在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器仅在目标或冒泡阶段处理事件。要在所有三个阶段监听事件,调用 addEventListener() 两次,一次将 useCapture 设置为 true,然后再次将 useCapture 设置为 false。
优先事项事件侦听器的优先级。优先级由 32 位整数指定。数字越大,优先级越高。所有优先级为 n 的侦听器在优先级为 n-1 的侦听器之前处理。如果两个或多个侦听器共享相同的优先级,则按添加顺序对其进行处理。默认优先级为 0。
useWeakReference确定对侦听器的引用是强引用还是弱引用。强引用(默认)可防止您的侦听器被垃圾收集。弱引用不会。
类级成员函数不受垃圾影响

于 2012-06-04T09:41:14.617 回答