(AS3)removeEventListener是否必要?

时间:2012-06-04 07:44:28

标签: actionscript-3

是否需要removeEventListener作为dealloc?

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

是的,我创建了一个庞大的项目而没有删除任何eventListener,经过长时间的使用它确实获得了大量的内存......

具有强引用的任何对象都不会被垃圾收集,直到删除强引用....这适用于eventlistener,bindings等......

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

使用WeakReference添加事件监听器您只需要向addMethod添加更多参数...

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

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

  

<强>参数:
  类型事件类型。
  侦听器处理事件的侦听器函数。此函数必须接受事件对象作为其唯一参数,并且必须为
  返回没有,因为这个例子显示:
  的功能(EVT:事件):无效

     

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