AS3我是否需要删除子项,如果我删除父项本身?

时间:2010-09-30 06:20:12

标签: actionscript-3 memory-leaks removechild

在Flash AS3中我是否需要移除孩子,如果我将其删除了孩子?

如果我先删除子项,则删除父对象 OR
如果我只是删除父对象

闪存会占用相同的内存吗?

1 个答案:

答案 0 :(得分:1)

好吧,如果子项不包含引用变量或者所有子引用变量都设置为null然后删除父项并将父引用设置为null,则也会从内存中删除子项。但是您必须手动删除附加到的侦听器他们。在大多数情况下使用弱事件侦听器是可以预防的,因为当垃圾收集器删除对象或影片剪辑时它们会被自动删除,因此您不必手动删除它们。  这里有一些例子帮助你理解

var obj = new MainContainer();
obj.addEventListener(MouseEvent.CLICK, MainContainer_Clicked)
addChild(Obj)

现在使用removeChild(obj)删除Obj将从舞台中删除它,但不会从内存中删除它。你必须设置obj=null。对于MainContainer Children来说,这也是一样的。现在你必须以这种方式手动删除附加到obj的事件监听器

obj.removeEventListener(MouseEvent.CLICK, MainContainer_Clicked)

如果您不希望它像这样删除

,请使用弱事件侦听器
obj.addEventListener(MouseEvent.CLICK, MainContainer_Clicked,false,0,true)

在这里阅读有关弱事件监听器的更多信息

http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html