
- 本栏最新文章
- ActionScript 3.0垃圾回收 07-03
- 左侧菜单导航栏的制作 07-02
- FLASH中一些不太常见的代码写法 07-02
- 造成Flash动画文件增大原因与解决的方法 06-27
- xml中运用后代存取运算符(..)的问题 06-25
- swf图片加载失败问题 06-25
- PHP+MYSQL+Flash做留言本 06-25
- flash如何适应任何分辨率方法大集合 06-24
- 用FLASH里的按钮控制网页中层的显示隐藏 06-24
- 一个侦听 多个按钮 06-24

- 本栏推荐文章
- Photoshop教程:水灵灵的美女调出来 12-30
- AS3与后台交互 12-21
- AS3通俗教程---AS3自身loading制作 12-19
ActionScript 3.0垃圾回收
众所周知,在as3的flash运行器中新增了垃圾回收的机制,即自动从内存中清除一些不可访问的对象。这个过程我们是无法控制的,不过可以通过一个例子来观察这个过程:
package
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.Timer;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.system.System;
public class GarbageCollection extends Sprite
{
public function GarbageCollection()
{
var s:Sprite = new Sprite;
s.graphics.beginFill(0, 1);
s.graphics.drawRect(0, 0, 100, 100);
//addChild(s);
s.addEventListener(Event.ENTER_FRAME, enterframelistener);
var timer:Timer = new Timer(1);
timer.addEventListener(TimerEvent.TIMER, timelistener);
timer.start();
}
private function timelistener(e:TimerEvent):void
{
new TextField();
}
private function enterframelistener(e:Event):void
{
trace('Flash Player当前所用内存(字节):', System.totalMemory);
}
}
}
当输出窗口停止输出信息时就意味着在构造方法中创建的局部变量s被当成垃圾给回收了。
如果将addChild(s)取消注释,s就会被放到场景中,从而不被回收。系统转而回收timelistener里创建的n多没用的new TextField,可以看到:
…省略…
Flash Player当前所用内存: 3403776 字节
Flash Player当前所用内存: 3407872 字节
Flash Player当前所用内存: 3420160 字节
Flash Player当前所用内存: 2142208 字节
Flash Player当前所用内存: 2146304 字节
…省略…
很明显可以看到垃圾回收的过程。
ps: 此例原型是Essential ActionScript 3.0 P277的Example 14-1. Garbage collection demonstration


