加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读