频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发工具应用教程 -> Flash教程 -> 从基础开始深入学Flash AS3教程(4)(译文)

从基础开始深入学Flash AS3教程(4)(译文)

作者:ASever  来源:flashseer.org  发布时间:2007-10-31 0:42:08  发布人:圈圈

减小字体 增大字体

10,delete关键字和类成员

delete关键字在Flash中是用来删除定义的变量,但是并不将对象从内存中清除掉(这是垃圾收集器的工作)。它只是将一个变量的引用设置成无效,让内存中的这个对象无法再被引用和使用,也无法再使用for in来枚举。

事实上,垃圾处理器(GC)将在特定的时候,自动的从内存中删除那些不再被引用和使用的变量。比如,你创建了两个对象引用A和B,都指向了对对象ObjectX的引用,如果delete了A,并不会让垃圾收集器把ObjectX从内存中删除,因为B的引用还是指向了这个对象。如果将A和B都delete,则不再有对ObjectX的引用,ObjectX也将被垃圾收集器回收。例如:

var a:Object = new Object();
var b:Object = a; // b和a引用同一个new Object();
delete a;
trace(b); // 输出[object Object] - 在内存中还是存在
delete b;
// GC将回收object

这个特性在Flash8和9(AS123)中几乎都是一样的,但是在Flash8中,GC的一些特性得到改善并能更好的工作。(注意,垃圾收集不是即时的)

虽然GC在AS3中并没有什么本质上的改变,但是因为使用了新的虚拟机,delete关键字的行为有所改变。现在,delete关键字只能针对类的动态属性和非公有成员有效。而在AS1和2中,delete能被用在所有的东西上。

// ActionScript 2
class DeleteVarClass {
    public var myVar:Number;
    function DeleteVarClass() {
        myVar = 1;
        trace(myVar); // 1
        delete myVar;
        trace(myVar); // undefined
    }
}
// ActionScript 3
package {
    public class DeleteVarClass {
        public var myVar:Number;
        public function DeleteVarClass() {
            myVar = 1;
            trace(myVar); // 1
            delete myVar;
            trace(myVar); // 1
        }
    }
}

在上面的AS3例子中,因为myVar变量是一个公有成员,所以不能用delete来删除这个变量。

尽管在AS3中不能删除类成员,但是如果你想删除一个对象的所有引用,可以通过将变量设置为null来代替delete。如:

myVar = null;

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

11,Dictionary类

AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类。Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键。例如:

var obj:Object = new Object();
obj["name"] = 1; // 键是字符串"name"
obj[1] = 2; // 键是1 (被转换成字符串"1")
obj[new Object()] = 3; // 键是new Object(),被转传成字符串"[object Object]"
for (var prop:String in obj) {
     trace(prop); // 输出:[object Object], 1, name
     trace(obj[prop]); // 输出:3, 2, 1
}

也就是说,无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的对象作为键,都会北转换成字符串"[object Object]"作为键,因此而指向了同一个数据。例如:

ActionScript Code:
var a:Object = new Object();
var b:Object = new Object();
var obj:Object = new Object();
obj[a] = 1; // obj["[object Object]"] = 1;
obj[b] = 2; // obj["[object Object]"] = 2;
for (var prop:String in obj) {
     trace(prop); // traces: [object Object]
     trace(obj[prop]); // traces: 2
}

Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。例如:

import flash.utils.Dictionary;
var a:Object = new Object();
var b:Object = new Object();
var dict:Dictionary = new Dictionary();
dict[a] = 1; // dict[a] = 1;
dict[b] = 2; // dict[b] = 2;
for (var prop:* in dict) {
     trace(prop); // traces: [object Object], [object Object]
     trace(dict[prop]); // traces: 1, 2
}

虽然在trace的时候,输出的还是[object Object],但是这个结果是对象的toString的结果。在Dictionary对象中,代表的是不同的对象引用。

注意,这里的prop的类型是*。这是很重要的,因为dict对象中的键可能是任何数据类型的。


将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· ASP+ 学习笔记 4
· Asp备份与恢复SQLServer..
· Linux操作系统下的集群工..
· 安全吗?在CSS样式表中调..
· 技巧:ASP.NET里的Sessi..
· 微软修补其IIS软件中的又..
· 假冒工行电子银行升级提..
· Pene Menn(韩国)的一些场..
· 在网页中添加天气预报
· 用连接池提高Servlet访问..
· MySQL数据库技术(32)
· Xhtml第5天:head区的其他..
· 创建带有关联的 XML 架构..
· Xhtml第4天:调用样式表
· 盼奥运:用Photosho打造..
· 数据库管理员最应熟悉和..
相关文章
· 从基础开始深入学Flash AS3..
· 从基础开始深入学Flash AS3..
· 从基础开始深入学Flash AS3..
· 从基础开始深入学Flash AS3..
· 从基础开始深入Flash AS3教..
· 从基础开始深入Flash AS3教..
· 从基础开始:CSS实用教程3-2..
· 从基础开始:CSS实用教..
· 从基础开始:CSS实用教程2-3..
· 从基础开始:CSS实用教程2-2..
· 从基础开始:CSS实用教程2-1..
· 从基础开始:CSS实用教程1-3..
· 从基础开始:CSS实用教程1-2..
· 从基础开始:CSS实用教程1-1..
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号