ActionScript - 在将数据分配给对象数组后处理XML?

时间:2010-11-13 12:45:42

标签: xml actionscript-3 dispose

将加载的XML数据分配给对象数组后,我想从内存中删除XML,或者至少可以将其用于垃圾收集器。但是,这样做也会删除数组中指定的对象值。

而不是调用XMLdata = null;,而是按照文档的指示调用System.disposeXML(XMLData);

  

disposeXML()方法:制作   立即指定XML对象   可用于垃圾收集。这个   方法将删除父母和孩子   所有节点之间的连接   指定的XML节点。

在将其分配给对象数组后,我是否应该尝试处理已加载的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

2 个答案:

答案 0 :(得分:3)

我认为George Profenza是正确的。尽管使用对象似乎是一个好主意 - 除非您从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类型。

答案 1 :(得分:0)

station.name正在引用回XML对象

您应该将其转换为字符串

stationObject.name = String(station.name)