在内存和垃圾收集方面,从sprite / movieclip中删除子节点的最有效方法是什么?
我已经看过至少三种方式。
简单的重新分配
sprite = new Sprite();
null,然后是新的
sprite = null
sprite = new Sprite();
或删除时(我喜欢)
while(sprite.numChildren > 0){
sprite.removeChildAt(0);
}
我只是在学习清洁和良好的内存管理,任何VALID输入都将不胜感激,谢谢。
答案 0 :(得分:5)
removeChild或removeChildAt实际上并没有从内存中删除Sprite或任何其他DisplayObject,它只是从displaylist中删除它。这意味着如果您创建1000个精灵并将它们添加到舞台(displaylist),然后在所有1000个精灵上使用removeChild,它们仍然可以永久存在于内存中。
要从内存中删除它,应在所有引用对象中将其设置为null。
如果你真的想删除它,只需将其置空并检查以下内容:
您可以使用像EventManagedSprite这样的解决方案,它使用EventRemover来更轻松地完全删除对象。这也可能对更大的项目有所帮助。
如果要重新使用sprite / object,但想循环使用回收对象,则应使用对象池。有关object pooling with AS3的更多信息:
答案 1 :(得分:1)
removeChild / removeChildAt从其父级移除DisplayObject;它仍然保留在内存中,如果你愿意,你可以稍后添加它(只要你有参考它)。
根据我的经验,removeChild + null赋值是删除DisplayObject并保存在内存中的最佳方法。
干杯,