2010-11-13 47 views
2

將加載的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

回答

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類型。

0

station.name被引用回到XML對象

你應該只將它轉換爲字符串

stationObject.name = String(station.name)