AS3/Flash/AIR:是否需对生成XMLList中的每个XML调用System.disposeXML()?
XMLList与原XML节点的关系及内存回收说明
背景代码
初始加载的XML:
<food> <sandwich name="burger"/> <sandwich name="sub"/> <pasta name="linguini"/> <pasta name="penne"> </food>
获取XMLList的ActionScript代码:
const sandwichList:XMLList = food.sandwich;
问题解答
是否会创建两个新的XML对象?
不会。food.sandwich返回的XMLList是对原XML文档中所有<sandwich>节点的引用集合,不会为每个节点创建新的XML对象。XMLList只是一个指向原有节点的视图,不复制节点数据。这些元素是原XML的副本还是引用?
是原XML节点的引用。如果修改XMLList中的元素(例如sandwichList[0].@name = "cheeseburger"),原XML文档里对应的<sandwich name="burger"/>节点属性也会同步改变,因为两者指向同一个对象实例。是否需要调用
System.disposeXML()进行垃圾回收?
不需要。System.disposeXML()仅适用于手动创建的独立XML副本或新解析的XML文档。XMLList中的元素是原XML节点的引用,只要原XML文档本身被垃圾回收机制处理,这些引用也会随之被清理,无需额外调用该方法。
内容的提问来源于stack exchange,提问作者BladePoint
相关产品推荐
相关产品推荐

