Flash AS 3.0垃圾回收
发布时间:2020-12-15 17:34:03 所属栏目:百科 来源:网络整理
导读: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.URLReque
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,300,300); //nsprite.graphics.endFill(); mgrLoader.push(LoaderExample(nsprite,"test00.swf")); mgrVec.push(nsprite); //加入vector addChild(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。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |