看看以下代码
var a = new View();
a = null;
....
class View {
private var clip: MovieCLip
public function View() {
clip.addEventListener(...)
}
}
在a
之后,会a = null
在内存中吗? addEventListener
是否会引起强烈推荐?
答案 0 :(得分:2)
默认情况下,addEventListener
会添加强引用。 addEventListener的最后一个参数是useWeakReference
。您可以使用true
为此参数指定弱引用。
答案 1 :(得分:2)
在描述您的示例时,附加事件侦听器的对象不会被垃圾回收。即使设置为null也无济于事。
要获取此对象goto gc(),您可以使用以下方法之一:
将useWeakReference
clip.addEventListener(EVENT.name,listenerMethod,false,0,true);
取消订阅听众。
处理程序方法
function handlerMethod(ev:Event):void
{
clip.removeEventListener(EVENT.name,listenerMethod);
}
答案 2 :(得分:1)
由于对clip
的所有引用均在a
范围内,因此GC会选取这两个对象并干净地删除它们。
我采用了你的例子并使用了一个ENTER_FRAME监听器来创建新的View
,就像你做的那样:
但是,如果剪辑被添加到舞台上,那么它将继续存在,并且a
也不会被删除:
您可以使用useWeakReference
的{{1}}参数来防止这种情况发生。