代码之家  ›  专栏  ›  技术社区  ›  Chunky Chunk

actionscript-在将数据分配给对象数组后释放XML?

  •  2
  • Chunky Chunk  · 技术社区  · 14 年前

    在将加载的XML数据分配给对象数组之后,我想从内存中删除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 回复  |  直到 11 年前
        1
  •  3
  •   Glycerine    14 年前

    我认为乔治·普罗芬扎是对的。尽管使用一个对象似乎是一个好主意——除非您从XML中解析出特定的信息——直接使用XML并放弃使用该对象也可以。您可以以与对象相同的方式遍历和应用XML,这将减少一点开销。


    根据您的问题,使用时 XMLData == null 您正在清除对象,但垃圾收集器将在 全部的 对数据的引用将被剥离。 使用 System.disposeXML() -你在强制收藏。

    单步执行调试器,并像 系统.disposexml()) 被调用。观察物体,看看它是如何清洁的。 我相信 station.name 不是字符串类型-因此将作为XML的对象引用回去-当使用它时,转换为字符串。

    应该这样做:

    stationObject.name = String(station.name)
    

    stationObject.name = station.name as String
    

    其中一个会起作用。

    它将把数据转换为字符串,而不是 也许 @xml类型。

        2
  •  0
  •   Radim Köhler user2134822    11 年前

    station.name引用回XML对象

    你应该把它铸成一根绳子

    stationObject.name = String(station.name)