parent上的removeChild()会删除它的子节点吗?

时间:2015-11-30 07:31:14

标签: actionscript-3 flash flash-builder flashdevelop

我的结构如下:

parent
   + child
   + child
   + child
   + sub-parent
         + sub-child
         + sub-child

现在,我使用“removeChild()”的乘法,逐个从场景中删除元素。像这样:

removeChild(sub-child);
removeChild(sub-child);
removeChild(sub-parent);
//and so on 

没关系,但我发现如果我删除一个父母,它的所有孩子也会从场景中消失。 (现在我不确定......)

如何以正确的方式从场景中删除元素?就像我现在这样做(逐个),或者我只删除一个父代,我的代码会更短一些。或者它是一回事吗?

3 个答案:

答案 0 :(得分:0)

您可以删除"子父母"并且它的孩子也将从场景(舞台)中移除。

答案 1 :(得分:0)

从舞台中删除显示对象也将删除该对象的所有子对象。可以把它想象成一个容纳那些孩子对象的容器。如果删除容器,还会删除其中的对象。

但是,如果你仍然有对这些子对象的引用,或者附加了事件监听器,那么它们就不会被垃圾收集(它们会在内存中执行任何与之关联的代码)。因此,您仍需要确保在删除父对象时清理所有内容。

答案 2 :(得分:0)

“显示列表”是一个如下所示的树结构:

enter image description here

当您将子容器添加到容器(DisplayObjectContainer)时,这些子容器将作为该容器的子容器保留,除非它们被特别删除。

当容器或DisplayObject附加到stage时,它们将呈现。如果对象是一个容器,它的所有后代(子项,子项的子项等)也将呈现。

如果从舞台中删除一个对象,它及其所有后代将停止呈现,但它们现有的父/子关系仍然保持原样。这意味着如果您再次向舞台添加带有子项的容器,则所有这些子项也将再次开始渲染。

因此,为了更准确地回答您的问题:删除容器实际上并不会删除其子项。孩子们没有舞台的连接,也不会渲染,但他们仍然是容器的孩子

尽管如此,您通常不需要从容器中移除每个孩子。只要孩子没有附加事件监听器或主要应用程序没有以任何其他方式引用它们,当它们与舞台的连接被切断时,它们都有资格进行垃圾收集。从舞台上移除最顶层的容器是完全正常的。