Actionscript 3 在as3中从DisplayObject中删除子对象的最有效方法是什么?(内存)

Actionscript 3 在as3中从DisplayObject中删除子对象的最有效方法是什么?(内存),actionscript-3,memory-management,Actionscript 3,Memory Management,在内存和垃圾收集方面,从精灵/电影剪辑中删除孩子最有效的方法是什么 我至少看到了三种方式 简单再分配 sprite = new Sprite(); 空然后新 sprite = null sprite = new Sprite(); 或者是中途搬家(我喜欢) 我正在学习干净、良好的内存管理,任何有效的输入都将不胜感激,谢谢。removeChild/removeChildAt从其父对象中删除DisplayObject;它仍然保留在内存中,如果需要,您可以稍后添加它(只要您有对它的引用) 根据我的

在内存和垃圾收集方面,从精灵/电影剪辑中删除孩子最有效的方法是什么

我至少看到了三种方式

简单再分配

sprite = new Sprite();
空然后新

sprite = null
sprite = new Sprite();
或者是中途搬家(我喜欢)


我正在学习干净、良好的内存管理,任何有效的输入都将不胜感激,谢谢。

removeChild/removeChildAt从其父对象中删除DisplayObject;它仍然保留在内存中,如果需要,您可以稍后添加它(只要您有对它的引用)

根据我的经验,removeChild+null赋值是删除DisplayObject并节省内存的最佳方法


干杯,

removeChild/removeChildAt从其父对象中删除DisplayObject;它仍然保留在内存中,如果需要,您可以稍后添加它(只要您有对它的引用)

根据我的经验,removeChild+null赋值是删除DisplayObject并节省内存的最佳方法


干杯,

removeChild或removeChildAt实际上并没有从内存中删除精灵或任何其他显示对象,它只是将其从显示列表中删除。这意味着,如果创建1000个精灵并将它们添加到舞台(displaylist),然后在所有1000个精灵上使用removeChild,它们可能仍然永远存在于内存中

要将其从内存中删除,应在所有引用对象中将其设置为null

如果确实要删除它,只需将其设为空并检查以下内容:

  • 使用removeChild或removeChildAt将其从显示列表中删除
  • 删除附加到剪辑的所有EventListener
  • 如果在数组、向量、字典或任何其他对象中使用引用,请将其从对象中删除,将其设置为null或使用Array.splice()将其拼接
  • 将对象设置为null
您可以使用类似的解决方案,该解决方案使用使完全删除对象更容易一些。这对更大的项目也有帮助


如果要重复使用精灵/对象,但要循环使用对象,则应使用对象池。更多信息:

removeChild或removeChildAt实际上并不从内存中删除精灵或任何其他DisplayObject,它只从displaylist中删除它。这意味着,如果创建1000个精灵并将它们添加到舞台(displaylist),然后在所有1000个精灵上使用removeChild,它们可能仍然永远存在于内存中

要将其从内存中删除,应在所有引用对象中将其设置为null

如果确实要删除它,只需将其设为空并检查以下内容:

  • 使用removeChild或removeChildAt将其从显示列表中删除
  • 删除附加到剪辑的所有EventListener
  • 如果在数组、向量、字典或任何其他对象中使用引用,请将其从对象中删除,将其设置为null或使用Array.splice()将其拼接
  • 将对象设置为null
您可以使用类似的解决方案,该解决方案使用使完全删除对象更容易一些。这对更大的项目也有帮助


如果要重复使用精灵/对象,但要循环使用对象,则应使用对象池。更多关于:

while(sprite.numChildren>0){var obj=sprite.getChildAt(0);sprite.removeChild(obj);obj=null;}这是一个安全的替代方法吗?如果引用设置为null,对象是否仍会被垃圾收集,但不会从显示列表中删除?@Pup否,它们将保留在内存中(直到不再有引用为止),您可以假设显示的“list”也使用数组。while(sprite.numChildren>0){var obj=sprite.getChildAt(0);sprite.removeChild(obj);obj=null;}这是一个安全的替代方案吗?如果引用设置为null,对象是否仍会被垃圾收集,但它们不会从显示列表中删除?@Pup否,它们将保留在内存中(直到不再有引用),您可以假设显示“列表”也使用数组。
while(sprite.numChildren > 0){   
    sprite.removeChildAt(0); 
}