Actionscript 3 什么机制允许AS3XML数据在类中被引用,但在原始对象被销毁时仍然存在
我有一个名为_refXMLManager的类实例,它包含一些XML数据,我可以通过_refXMLManager.xmlData引用这些数据 我有第二个类,名为XMLREFTEST:Actionscript 3 什么机制允许AS3XML数据在类中被引用,但在原始对象被销毁时仍然存在,actionscript-3,Actionscript 3,我有一个名为_refXMLManager的类实例,它包含一些XML数据,我可以通过_refXMLManager.xmlData引用这些数据 我有第二个类,名为XMLREFTEST: package { public class XMLREFTEST { private var _data:XML; function XMLREFTEST(data:XML) { _data=data } public function get data():XML { retu
package {
public class XMLREFTEST {
private var _data:XML;
function XMLREFTEST(data:XML) {
_data=data
}
public function get data():XML {
return _data;
}
}
}
我可以通过更改_refXMLManager中节点的值并查看它在_xmlRefTest中的更新来验证_xmlRefTest中的数据是否确实是引用
trace("_refXMLManager data: " + _refXMLManager.xmlData.test);
// _refXMLManager data: HELLO WORLD
_xmlRefTest = new XMLREFTEST(_refXMLManager.xmlData);
trace("_xmlRefTest data: " + _xmlRefTest.data.test);
// _xmlRefTest.data: HELLO WORLD
_refXMLManager.xmlData.test="Hi"
trace("_refXMLManager data: " + _refXMLManager.xmlData.test);
// _refXMLManager data: Hi
trace("_xmlRefTest data: " + _xmlRefTest.data.test);
// _xmlRefTest data: Hi
然后我杀死“主”对象。(kill函数将_refXMLManager中的原始URLLoader和xmlData设置为null)
所以我的问题是:ActionScript中发生了什么,允许处理原始XML对象,但允许对它的引用保持不变?我想知道引用是否必须等待垃圾收集,但事实似乎并非如此。您误解了AS3中的引用和变量。如果对象仍有至少一个引用,则无法终止该对象 因此_xmlRefTest.data仍然有对xml的引用,因为它确实从一开始就防止了对象被破坏 你确实假设了一些事实上从未发生过的事情:
- 原始物体从未被摧毁
- 您从未真正删除过原始xml
- xml不能是GC,因为它从一开始就不适合它,因为它至少还有一个引用
_refXMLManager.kill();
trace("_refXMLManager.xmlData==null: " + (_refXMLManager.xmlData==null));
// _refXMLManager.xmlData==null: true
trace("_xmlRefTest data: " + _xmlRefTest.data.test);
// _xmlreftest data: Hi