假设我有一个如下所示的类结构,其中我有一个临时子项,显示并稍后替换,因此不再需要。但是,由于多个方法之前访问过该子节点,我需要将其作为类变量。
因此,在替换该子项后,我不再需要它并希望允许垃圾收集重用该空间。由于变量是类变量,我不能使用delete tempChild
。通常,垃圾收集将在没有更多引用的情况下释放内存;所以我的问题是,如果简单地为该变量分配null
就足以为它激活GC。
class Test extends Sprite
{
private var tempChild:Sprite;
public function Test ()
{
tempChild = new Sprite();
tempChild.graphics.drawRect( 0, 0, 100, 100 );
this.addChild( tempChild );
}
public function replace ( obj:DisplayObject ):void
{
this.removeChild( tempChild );
tempChild = null; // <-- here I want to free the variable
this.addChild( obj );
}
}
编辑:为此做了快速基准测试,结果如下:
测试类型A:将Sprite引用存储为私有类变量
测试类型B:通过子索引(getChildAt
)
由于我只删除了一次元素,但必须多次访问它,我会坚持使用选项A(基本上就像上面的代码一样)。
答案 0 :(得分:1)
您的代码首先没有显示保留“tempChild”的理由。假设你做需要它,那么,是的,为tempChild分配null将允许tempChild引用的对象被GCed(只要不存在对它的其他引用)。但是,当你可以简单地引用this
的第一个孩子时,为什么要使用“tempChild”?