關於flash中的垃圾回收
来源:互联网 发布:大连金斧子软件 编辑:程序博客网 时间:2024/05/17 00:51
看了Luar的 神秘的Garbage Collection , 略有不同意見
var ref1:Object = new Object();
ref1.name = "Luar";
ref2 = ref1; // 複製新Reference到另一個Variable
delete ref1; // 然後刪除ref1
trace(ref1.name); //output: undefined
trace(ref2.name); //output: Luar
ref1.name = "Luar";
ref2 = ref1; // 複製新Reference到另一個Variable
delete ref1; // 然後刪除ref1
trace(ref1.name); //output: undefined
trace(ref2.name); //output: Luar
我沒有學過面向對象語言,我只學過C,上面的代碼在我看來是符合GC的規則的。
上面代碼所做的事情是:
1, 用 new Object() 生成一個匿名對象,返回該對象在内存中的位置(C裏面的指針)
如果沒有下面的步驟,這個對象將很快被flash黨作垃圾回收,即這樣的代碼是沒有意義的:
new Object();
但他實際上是符合actionscript的語法的。 2,創建一個 ref1變量,並讓ref1值為上面匿名對象的内存地址
3,創建一個 ref2變量,並讓ref2值為ref1的值——實際上就是匿名對象的内存地址
隨後ref2和ref1並沒有直接關係,他們只是指向同一個地址,所以刪除ref1/ref2並不會影響到ref2/ref1。
4,delete ref1; 的作用:如果沒有ref2的出現,上面的匿名對象只被ref1引用,儅ref1被delete,這個匿名對象就會消失;而ref2的出現,使ref1被delete之後仍然有引用指向該匿名對象,所以這個對象不會被回收,ref2也繼續有效。
同樣的道理也適用于function的時候,function(){} 也是產生一個匿名函數對象,返回一個指針。
有些咬文嚼字了,呵呵,不過我理解的垃圾回收就是這樣的。
至於MovieClip的回收,確實不符合垃圾回收的規則,在Moock的權威指南中也有論述,贊同Luar的看法。
- 關於flash中的垃圾回收
- flash 垃圾回收GC
- Flash Player垃圾回收机制
- Flash Player垃圾回收机制
- Flash AS 3.0垃圾回收
- Flash AS 3.0垃圾回收
- .NET中的垃圾回收
- .Net中的垃圾回收
- C++中的垃圾回收
- Java中的垃圾回收
- c#中的垃圾回收
- java中的垃圾回收
- Java中的垃圾回收
- Java中的垃圾回收
- Java中的垃圾回收
- Java中的垃圾回收
- JVM中的垃圾回收
- Java中的垃圾回收
- WinCVS中文版及中文使用手册
- 你偷走你的今天了吗?(转)
- 考卷列表
- 图片验证码的生成
- linux指令大全(完整篇)(转自www.ChinaJavaWorld.com)
- 關於flash中的垃圾回收
- 数据库原理复习笔记
- 关于Java Servlet的Filter 技术(转)
- 《浮在台灯下的java》--关于程序员的职业规划
- openldap for win32
- Java学习从入门到精通[转]
- 来自:www.hoopchina.com 作者:儿童节 《雄心一万丈》
- 肖申克的救赎
- NGNc成功完成S60平台移植