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

问题描述:

将加载的XML数据分配给对象数组后,我想从内存中删除XML,或者至少可以使用垃圾收集器。但是,这样做也会删除数组中指定的对象值。ActionScript - 将数据分配给数组对象后处置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

我不知道,但它看起来像你设置你的stationObject的值引用,而不是复制,否则我不明白为什么对象值在处理xml后清除。尝试stationObject.name = new String(station.name);并看看你是否得到相同的行为。另外,使用Object比使用强类型的东西慢。你可能会更好地使用xml本身(例如trace(XMLData.station [0] .name)) – 2010-11-13 13:33:52

我认为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类型。

station.name被引用回到XML对象

你应该只将它转换为字符串

stationObject.name = String(station.name)