Flash AS 3.0垃圾回收

来源:互联网 发布:北京快速排名优化工具 编辑:程序博客网 时间:2024/06/12 00:39
import flash.display.Sprite;import flash.display.MovieClip;import flash.net.LocalConnection;import flash.sampler.NewObjectSample;import flash.events.MouseEvent;import flash.display.Loader;import flash.events.Event;import flash.net.URLRequest;trace(System.totalMemory);//强行执行垃圾回收, 只适合于开发阶段function ForceGC():void{    trace("clear memory");try {new LocalConnection().connect("foo");new LocalConnection().connect("foo");} catch (e:Error) {}} var loader:Loader = null;  var request:URLRequest = null;//加载一个外部例子function LoaderExample(tsprite, url:String) {        trace("Hello LoaderExample");            loader = new Loader();            //configureListeners(loader.contentLoaderInfo);            loader.addEventListener(MouseEvent.CLICK, clickHandler);            request = new URLRequest(url);            loader.load(request);            tsprite.addChild(loader);return loader;        }//var L1 = LoaderExample("test00.swf");//var L2 = LoaderExample("test00.swf");function configureListeners(dispatcher:IEventDispatcher):void {            dispatcher.addEventListener(Event.COMPLETE, completeHandler);            //dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);            //dispatcher.addEventListener(Event.INIT, initHandler);           // dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);           // dispatcher.addEventListener(Event.OPEN, openHandler);            //dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);            dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);}function completeHandler(event:Event):void {if(event.type=="complete")            trace("completeHandler: " + event);}function unLoadHandler(event:Event):void {            trace("unLoadHandler: " + event);}//增加加载外部文件addMem.addEventListener(MouseEvent.CLICK, AddMem_func);var nsprite = null;var mgrVec = new Vector.<Sprite>();var mgrLoader = new Vector.<Loader>();function AddMem_func(event:MouseEvent):void{trace("dddd");nsprite = new Sprite();    //nsprite.graphics.beginFill(0x0000ff);//nsprite.graphics.drawRect(0, 0, 300, 300);//nsprite.graphics.endFill();mgrLoader.push(LoaderExample(nsprite, "test00.swf"));mgrVec.push(nsprite);  //加入vectoraddChild(nsprite);}//删除Flash AS 3.0不能强行清除内存的问题delMem.addEventListener(MouseEvent.CLICK, DelMem_func);function DelMem_func(event:MouseEvent):void{for(var i=0;i<mgrVec.length;i++){   var tsprite = mgrVec[i];      //移触监听   var loads = mgrLoader[i];      loads.unloadAndStop(true);   loads.removeEventListener(MouseEvent.CLICK, clickHandler,true);      removeChild(tsprite);   mgrVec[i] = null;   mgrLoader[i] = null;}mgrVec.splice(0, mgrVec.length);mgrLoader.splice(0, mgrLoader.length);System.gc();ForceGC();}//loader的事件监听function clickHandler(event:MouseEvent):void {       trace("release memeory");}

使用as 3.0需要将不需要的对象都null, 然后强行执行垃圾回收,这样它才能回收无效的内存。

否则你不能知道Flash何时进行垃圾回收。此外所有监听的事件也必须全部remove。

0 0
原创粉丝点击