AS3范围和垃圾收集

时间:2011-02-11 14:13:43

标签: actionscript-3 garbage-collection scope

如果在其他地方没有引用,在函数内创建的Objetcs会自动标记为垃圾收集?

我们说,我有一个名为SubClass的类。在构造函数中我创建了一些displayObjects。 然后我在某处安装SubClass。当我删除这个SubClass实例时,里面的对象会被标记为垃圾收集吗?

提前谢谢! 干杯 布鲁诺

1 个答案:

答案 0 :(得分:2)

是的,除非您在SubClass之外的任何地方引用了SubClass的成员,或者您在SubClass(或其中的任何对象)内保持对类外部的活动引用。

后者的典型示例是SubClass是否订阅了Stage事件;如果监听器不是弱的(addEventListener的第五个参数),你将在stage和SubClass实例之间保持一个活动的链接,即使你删除了对象并将其置空,它也不会被收集。 对于简单的侦听器,您可以将第5个参数设置为true,因此引用很弱并且将被垃圾收集器破坏。对于更复杂的情况(或者例如NetStreams,Loaders,Timeline音频等等),您需要为类创建一种方法,以便为任何外部对象取消链接,并停止任何可能阻止收集的进程,如公共破坏()方法关闭请求,停止媒体,删除Listeners等...

但话又说回来,对于简单的情况,当你只有孤立的子节点而没有对类外部的引用时,只需删除你的实例并将其引用归零就足以进行垃圾收集了。