将加载的 XML 数据分配给对象数组后,我想从内存中删除 XML,或者至少可用于垃圾收集器。但是,这样做也会删除数组中分配的对象值。
我不是调用 XMLdata = null;
,而是按照文档的指示调用 System.disposeXML(XMLData);
:
disposeXML() method: Makes the specified XML object immediately available for garbage collection. This method will remove parent and child connections between all the nodes for the specified XML node.
在将加载的 XML 数据分配给对象数组后,我不应该尝试处理它吗?
//Convert XML Data To Array Of Objects
var XMLData:XML = XML(evt.currentTarget.data);
for each (var station:XML in XMLData.station)
{
var stationObject:Object = new Object();
stationObject.name = station.name;
arrayData.push(stationObject);
}
//Nullify XML
trace(XMLData == null); //false
trace(arrayData[0].name); //traces name
XMLData = null;
trace(XMLData == null); //true
trace(arrayData[0].name); //traces name
//Dispose XML
trace(arrayData[0].name); //traces name
System.disposeXML(XMLData);
trace(arrayData[0].name); //does not trace, traces nothing
最佳答案
我认为乔治·普罗芬扎是正确的。尽管使用对象似乎是个好主意(除非您从 XML 中解析出特定信息),但直接使用 XML 并放弃使用对象也同样有效。您可以像对象一样遍历和应用 XML,这将消除少量开销。
根据您的问题,当使用 XMLData == null
时,您正在清除该对象,但垃圾收集器不会触及它,直到所有对数据的引用都被清除。被剥夺了。
使用 System.disposeXML() - 您强制进行收集。
进入调试器,并在调用 System.disposeXML()
时停止。观察物体的清洁情况。
我相信 station.name
不是字符串类型 - 因此将作为 XML 的对象引用回来 - 使用它时,Cast 是一个字符串。
这应该像这样完成:
stationObject.name = String(station.name)
或
stationObject.name = station.name as String
其中一个可以工作。
它将数据转换为字符串,而不是@XML 类型。
关于xml - ActionScript - 将数据分配给对象数组后处理 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172554/