在内存和垃圾回收方面,从精灵/电影剪辑中删除孩子最有效的方法是什么?
我至少看过三种方法。
简单的重新分配
sprite = new Sprite();
null,然后是new
sprite = null
sprite = new Sprite();
或者while删除(我很喜欢)
while(sprite.numChildren > 0){
sprite.removeChildAt(0);
}
我正在学习干净和良好的内存管理,任何有效的输入都将不胜感激,谢谢。
发布于 2011-08-14 10:30:04
removeChild或removeChildAt实际上不会从内存中删除Sprite或任何其他DisplayObject,它只会将其从显示列表中删除。这意味着如果您创建了1000个精灵并将它们添加到舞台(显示列表)中,然后在所有1000个精灵上使用removeChild,它们可能仍然永远存在于内存中。
要将其从内存中删除,应在所有引用对象中将其设置为null。
如果您真的想删除它,只需将其设为空并检查以下内容:
如果您在数组、矢量、字典或任何其他对象中使用了引用,请将其从对象中删除,将其设置为null或使用Array.splice()
将其拼接起来
您可以使用像EventManagedSprite这样的解决方案,它使用EventRemover使完全删除对象变得更容易。这在更大的项目中也会有帮助。
如果你想重用精灵/对象,但又想回收这些对象,你应该使用对象池。有关object pooling with AS3的更多信息
发布于 2011-08-14 10:14:28
removeChild / removeChildAt将DisplayObject从其父对象中删除;它仍然保留在内存中,如果需要,您可以在以后添加它(只要您有对它的引用)。
根据我的经验,removeChild + null赋值是删除DisplayObject并节省内存的最好方法。
干杯,
https://stackoverflow.com/questions/7056181
复制相似问题