注释:10,删除键和类成员


Flash中使用删除关键字来删除定义的变量,但它不会从内存中删除对象(这是垃圾收集器的工作)。它只是将一个变量的引用设置为无效,这样内存中的对象就不能再次引用和使用,也不能枚举再次使用。


事实上,垃圾处理器(GC)将在




10、删除键和类成员


Flash中使用删除关键字来删除定义的变量,但它不会从内存中删除对象(这是垃圾收集器的工作)。它只是将一个变量的引用设置为无效,这样内存中的对象就不能再次引用和使用,也不能枚举再次使用。


事实上,GC会自动删除不再引用和在某一特定时间在内存中使用的变量。例如,你创建一个对象,即A和B,所有引用对象objectx参考。如果删除的是,垃圾收集器将不会从内存中删除objectx,因为B的引用仍然指向该对象。如果A和B都删除,没有参考objectx,和ObjectX将被垃圾收集器回收。例如:


var a:对象=新对象();
var(b):对象= A,B和一个指向相同的新(对象)的引用;
删除;
跟踪(b);内存中的对象对象}输出仍然存在
删除B;
对象的恢复


这个功能几乎是相同的(as123 flash8和9),但在Flash8,一些GC的特点进行了改进和更好地工作。(注意,垃圾收集是不是即时的)


虽然是在AS3的GC没有本质变化,删除的关键词已经改变,因为新的虚拟机使用的行为。现在,删除关键字只能适用于类和非公共成员的动态特性,在1和2,删除可用于一切。


2 / /脚本
类deletevarclass {
公共变量myVar:数;
函数的DeleteVarClass(){
myVar = 1;
微量(myVar); / / 1
删除myVar;
微量(myVar); / /未定义
}
}
3 / /脚本
包{
公共课DeleteVarClass {
公共变量myVar:数;
公共函数DeleteVarClass(){
myVar = 1;
微量(myVar); / / 1
删除myVar;
微量(myVar); / / 1
}
}
}


在以上AS3的例子,因为myVar变量是一个公共成员,这是不可能使用Delete删除变量。


虽然你不能删除在AS3的类成员,如果你想删除所有的引用一个对象,你可以更换删除该变量设置为null。如:


myVar = null;


如果一个对象的所有引用都是空的,GC将自动从内存中删除该对象。


11,字典类


字典类(Flash AS3。utils。词典)是一个新的类,字典类和对象之间的唯一区别是,字典对象可以使用一个非字符串作为键-值对的关键。例如:


var obj:对象=新的对象();
obj {名字} = 1; / /关键是字符串名字
obj { 1 } = 2; / / 1键(转换为字符串1)
obj {新(对象)} = 3; / /新的(对象),关键是转化为字符串{物}
对于(VAR道具:字符串对象){
跟踪(道具);输出:{对象},1,名称
微量(obj {道具}); / /输出:3, 2, 1
}


也就是说,无论使用哪种类型的变量作为键,它都会被转换成一个字符串。同时,如果使用不同的对象作为键,您将把北方转换成字符串{对象对象}作为键,因此它指向相同的数据:


Actionscript代码:
var a:对象=新对象();
var:对象=新对象();
var obj:对象=新的对象();
obj {一} = 1; / / {对象obj { }} = 1;
obj {黑} = 2; / / {对象obj { }} = 2;
对于(VAR道具:字符串对象){
跟踪(道具); /跟踪:{对象对象}
微量(obj {道具}); / /的痕迹:2
}


字典类将不具有此限制,并且可以将密钥设置为任何类型的数据:


进口flash.utils.dictionary;
var a:对象=新对象();
var:对象=新对象();
VaR的字典:字典=新词典();
{一},= 1; / / dict {一} = 1;
字典{黑} = 2; / / dict {黑} = 2;
对于(VAR道具:*在dict){
跟踪(道具); /跟踪:{对象对象},{对象对象}
微量(dict {道具}); / /的痕迹:1, 2
}


而在跟踪输出{对象},但这个结果是对象的ToString结果。在字典对象,不同的对象引用的代表。


注意,这里是支柱型的。这很重要,因为在dict对象的键可以是任何数据类型。