2010-11-13 2 views
2

после назначения загруженных данных XML массиву объектов, я хотел бы удалить XML из памяти или, по крайней мере, получить доступ к сборщику мусора. однако это также удаляет назначенные значения объекта в массиве.ActionScript - Dispose 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 (имя станции); и посмотрим, получится ли у вас такое же поведение. Кроме того, использование Object медленнее, чем использование чего-то строго типизированного. Возможно, вам лучше использовать сам xml (например, trace (XMLData.station [0] .name)) –

ответ

3

Я думаю, что Джордж Форенца правильный. Хотя кажется хорошей идеей использовать объект - если только вы не разобрали определенную информацию из 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) 
Смежные вопросы