AS3:通过引用计数使对象符合GC条件

时间:2013-10-19 17:57:15

标签: actionscript-3 garbage-collection reference-counting

我读了一篇关于Flash如何进行垃圾收集的非常好的文章: http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

但是我想知道你需要做些什么来确保所有对象都是通过更快的引用计数方法而不是更加CPU密集的标记和扫描方法进行垃圾收集。假设我有以下函数并用它创建一个对象:

function makeIt():void {
    var spriteA:Sprite = new Sprite();
    var spriteB:Sprite = new Sprite();
    spriteB.addEventListener(MouseEvent.CLICK, myCallback);
    var spriteC:Sprite = new Sprite();
    spriteA.addChild(spriteB);
    spriteB.addChild(spriteC);
    stage.addChild(spriteA);
}

如果我刚刚执行了以下操作,是否只能通过标记和扫描符合GC的条件?

spriteB.removeEventListener(MouseEvent.CLICK, myCallback);
stage.removeChild(SpriteA);

家长提到了他们的孩子,孩子们提到了他们的父母,所以我是否必须做所有这些以使其符合GC的参考计数?

spriteB.removeChild(spriteC);
spriteB.removeEventListener(MouseEvent.CLICK, myCallback);
spriteA.removeChild(spriteB);
stage.removeChild(spriteA);
spriteA = null;

我是否还必须将spriteB和spriteC设置为null?如果spriteC是一个扩展Sprite并拥有它自己的几个属性的类的实例,那该怎么办呢?我也必须废除这些吗?

1 个答案:

答案 0 :(得分:0)

是的,您必须removeChild,removeEventListener并设置本地引用(或类级别引用)以使引用计数为零。