是否需要removeEventListener作为dealloc?
我知道在AS3中可能会出现内存泄漏,我只是想知道是否删除事件监听器是其中一种方式。
答案 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 确定对侦听器的引用是强还是弱。强大的参考(默认)会阻止您的 听众被垃圾收集。弱参考不是。
类级成员函数不受垃圾处理