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