- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于as3控制内存增长的几个基础原则
Event listeners:?事件侦听的响应函数所在对象默认会被添加引用计数,有以下两种方式可以避免事件侦听引起的内存泄漏
采用弱引用添加事件侦听 myObj.addEventListener Event.SUP, this._onEvent, false, 0,?true? ; ,采用这种方式侦听响应函数对象不会被添加引用计数,若外部引用都被清空则对象将被垃圾回收,不再响应事件。
若采用强引用,则要要在不需要的时候手动调用removeEventListeneror 移除事件侦听器。
Clean up references:?如果?objA?有成员ob引用了?objB, 则直接设置?objB null 将不会导致objB实例被垃圾回收,需要objA.ob null之后才会将其回收。也就是说,一个对象的所有引用都被清理之后,其才会被垃圾回收(在AS中只要一个对象没有引用能追溯至根节点,即stage、static成员等,则会被垃圾回收)。 不注意清理引用是引起内存泄漏的一个常见问题。a:obj new obj ;
b:obj new obj ;
a.foo b;
b.foo a;
a.foo null;
b.foo null;
a null;
b null;
class Loader load onFin:Function :void thisptr this;
_lder.lod function onFin thisptr ; ; lder new Loader ;
lder.load
function l:Loader :void l.xxx; ; class A spr:Sprite;
function A spr new Sprite ;
spr.addEventListener xxx, onXXX, fal, 0, true ; function onXXX evt:Event :void function dispose :void spr.remvoeEventListener xxx, onXXX ;
spr null; var a:A new A ;
a.dispose ;
a null; var lder:A new A ;
lder.load xx ; Reuse objects:?对于需要频繁创建销毁的一些较复杂的对象,可以创建object pool来管理,当对象不需要使用时,可以用object pool回收对象,同时在对象上定义reset 函数初始化对象,需要使用对象时则从object pool取出对象并调用reset即可。
Immediately kill objects:?一些对象, 比如XML、BitmapData可以直接调用BitmapData.dispose 、System.disposeXML 直接释放其持有的内存。
Know the language:?需要进一步了解一些Flash的底层机制。比如DisplayObject设置?cacheAsBitmap true;?实际上是在底层创建了一bitmap对象,旋转或缩放DisplayObject?将会导致这个bitmap对象的重新绘制. Filters也是一样。调用BitmapData.rect?实际上会每次都创建一个rectangle.
Beware loops:?要小心循环的使用,对于可以放在循环外的新建对象、要尽量放在循环外. E.g.:
// creates 100 Point objects
for var i:int 0; i 100; i++ var p:Point new Point;
p.x myObjs[i].x;
p.y myObjs[i].y;
// do something with p vs.
// creates 1 Point object
var p:Point new Point;
for var i:int 0; i 100; i++ p.x myObjs[i].x;
p.y myObjs[i].y;
// do something with p Use Static members:对于一些需要大量创建的类成员公用变量、频繁创建的临时变量,可以考虑用静态变量进行替代。
A有大量对象实例被频繁调用foo的情况下:
class A var conf aa 1, bbb 2, cc [] ;
var max_load:int 5;
function foo :void var tmp_arry new ByteArray ;
您可能关注的文档
最近下载
- 2025年上海市崇明区中考二模英语试题(含答案).pdf VIP
- 第4课 乡愁(余光中)课件(共19张PPT) 2024-2025学年统编版语文九年级上册.pptx VIP
- 计算机网络网络安全PPT(完整版).pptx VIP
- 2025年邮政职业技能鉴定考试(储汇业务员·高级)历年参考题库含答案详解(5卷).docx VIP
- 供应室去污区课件.pptx VIP
- 三年级快乐阅读社团活动教案.docx VIP
- 预决算管理制度.docx VIP
- 《大学生恋爱心理》PPT课件.ppt VIP
- GB50017-2017钢结构设计标准.doc VIP
- 2025-2026学年初中信息科技冀教版2024七年级全一册-冀教版2024教学设计合集.docx
文档评论(0)