关于as3控制内存增长几个基础原则

关于as3控制内存增长几个基础原则

ID:36413637

大小:34.00 KB

页数:6页

时间:2019-05-10

关于as3控制内存增长几个基础原则_第1页
关于as3控制内存增长几个基础原则_第2页
关于as3控制内存增长几个基础原则_第3页
关于as3控制内存增长几个基础原则_第4页
关于as3控制内存增长几个基础原则_第5页
资源描述:

《关于as3控制内存增长几个基础原则》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、·Eventlisteners: 事件侦听的响应函数所在对象默认会被添加引用计数,有以下两种方式可以避免事件侦听引起的内存泄漏o采用弱引用添加事件侦听(myObj.addEventListener(Event.SUP,this._onEvent,false,0, true );),采用这种方式侦听响应函数对象不会被添加引用计数,若外部引用都被清空则对象将被垃圾回收,不再响应事件。o若采用强引用,则要要在不需要的时候手动调用removeEventListeneror移除事件侦听器。Cleanupreferences: 如果 objA 有成员ob引用了 objB,则直接设置 objB=

2、null将不会导致objB实例被垃圾回收,需要objA.ob=null之后才会将其回收。也就是说,一个对象的所有引用都被清理之后,其才会被垃圾回收(在AS中只要一个对象没有引用能追溯至根节点,即stage、static成员等,则会被垃圾回收)。不注意清理引用是引起内存泄漏的一个常见问题。a:obj=newobj();b:obj=newobj();a.foo=b;b.foo=a;a.foo=null;b.foo=null;a=null;b=null;classLoader{load(onFin:Function):void{thisptr=this;_lder.lod(functio

3、n(){onFin(thisptr);});}}{lder=newLoader();lder.load(function(l:Loader):void{l.xxx;});}classA{spr:Sprite;functionA(){spr=newSprite();spr.addEventListener(xxx,onXXX,fal,0,true);}functiononXXX(evt:Event):void{}functiondispose():void{spr.remvoeEventListener(xxx,onXXX);spr=null;}}{vara:A=newA();a.d

4、ispose();a=null;}{varlder:A=newA();lder.load(xx);}·Reuseobjects: 对于需要频繁创建销毁的一些较复杂的对象,可以创建objectpool来管理,当对象不需要使用时,可以用objectpool回收对象,同时在对象上定义reset()函数初始化对象,需要使用对象时则从objectpool取出对象并调用reset即可。·Immediatelykillobjects: 一些对象,比如XML、BitmapData可以直接调用BitmapData.dispose()、System.disposeXML()直接释放其持有的内存。·Kn

5、owthelanguage: 需要进一步了解一些Flash的底层机制。比如DisplayObject设置 cacheAsBitmap=true; 实际上是在底层创建了一bitmap对象,旋转或缩放DisplayObject 将会导致这个bitmap对象的重新绘制.Filters也是一样。调用BitmapData.rect 实际上会每次都创建一个rectangle.·Bewareloops: 要小心循环的使用,对于可以放在循环外的新建对象、要尽量放在循环外.E.g.://creates100Pointobjects for(vari:int=0;i<100;i++) { varp:P

6、oint=newPoint; p.x=myObjs[i].x; p.y=myObjs[i].y; //dosomethingwithp }·vs.//creates1Pointobject varp:Point=newPoint; for(vari:int=0;i<100;i++) { p.x=myObjs[i].x; p.y=myObjs[i].y; //dosomethingwithp }·UseStaticmembers:对于一些需要大量创建的类成员公用变量、频繁创建的临时变量,可以考虑用静态变量进行替代。A有大量对象实例被频繁调用foo的情况下:classA{varco

7、nf={aa=1,bbb=2,cc=[]};varmax_load:int=5;functionfoo():void{vartmp_arry=newByteArray();tmp_arry=…..;}}classA{staticvarconf={aa=1,bbb=2,cc=[]};staticvarmax_load:int=5;//vartmp_arry:ByteArray=newByteArray();staticvartmp_arry:ByteArray=newB

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。