看看下面的代码闪光灯垃圾收集和处理事件
var a = new View();
a = null;
....
class View {
private var clip: MovieCLip
public function View() {
clip.addEventListener(...)
}
}
将a
在内存a = null
后? addEventListener
是否增加了强烈的引用?
看看下面的代码闪光灯垃圾收集和处理事件
var a = new View();
a = null;
....
class View {
private var clip: MovieCLip
public function View() {
clip.addEventListener(...)
}
}
将a
在内存a = null
后? addEventListener
是否增加了强烈的引用?
由于所有clip
的引用是内a
,GC会拿起对象和干净地删除它们。
我已经采取了你的榜样,并使用ENTER_FRAME监听器在你做了同样的方式来创建新的View
S:
但是,如果剪辑添加到舞台,然后它会继续存在,并a
也不会被删除:
您可以使用的useWeakReference
参数0以防止这种情况发生。
谢谢!我可能想知道你是怎么制作这些地块的? – Eugeny89 2012-02-20 17:18:00
我使用FDT发展,它有一个非常有用的探查:) http://fdt.powerflasher.com/ – weltraumpirat 2012-02-20 17:50:36
默认情况下addEventListener
增添了有力的参考。 addEventListener的最后一个参数是useWeakReference
。您可以使用此参数的true
来指定弱引用。
这意味着一个vil不会被删除?谢谢 – Eugeny89 2012-02-20 10:17:33
描述您例如,在事件侦听器所连接的对象将不会被垃圾收集。即使设置null也无济于事。
得到这个对象转到GC(),您可以使用下列方法之一:
将useWeakReference
clip.addEventListener(EVENT.name,listenerMethod,false,0,true);
退订听众。
在处理方法
function handlerMethod(ev:Event):void
{
clip.removeEventListener(EVENT.name,listenerMethod);
}
这实际上并非如此 - 因为除了a之外不存在对剪辑的引用,两者都将被GC拾取。 – weltraumpirat 2012-02-20 10:36:50
为什么你想要一个剪辑退出舞台? – 2012-02-20 10:38:50
它可能已被添加或删除到其他地方 - 我们不知道。我们只知道代码中的内容。 – weltraumpirat 2012-02-20 10:41:09
最好的,你所能做的就是删除所有事件侦听器。您可以使用一些现有的库来记住添加的监听器,或者在您的代码中执行此操作。 – turbosqel 2012-02-20 14:24:11