flex开发中关于内存释放几个注意的地方

1.监听事件时用弱引用方式(特别是对Applicatiion.applicaion和Stage的事件监听),方式如下:第五个参数值为true
Application.application.addEventListener(MouseEvent.CLICK,doClick,false,0,true);
2.集合类如Array和Dictionary里的元素,在不用的时候要设置为null;(尤其是主页面上的集合类),如:myMap[o]=null;
3.方法中创建的变量引用必须用var修饰,否则将被认为是全局变量,永远不会释放内存。
4.所有的css类都定义到css.css文件里,不要在模块里定义css,不然会导致gc不干净
5.moduelLoader的内存泄露问题:

经过初步测试,在debug版的flashplayer里,ModuleLoader的unload方法有严重的内存泄露问题(用moduleLoader不断地加载不同的url);但是在release版中表现正常;

如果需要在debug版的方法里规避此问题可用以下方法加载url,不要用unloader方法:/**

*为了解决moduleLoader的内存泄露问题

* @param oldMLoader 需要改变url的moduleLoader

* @param url 指定的url

*

*/



static public function fixLoadForModuleLoader(oldMLoader:ModuleLoader,url:String):void{

var tparent:Container=oldMLoader.parent;

var index=oldMLoader.parent.getChildIndex(oldMLoader);

var newMLoader:ModuleLoader=new ModuleLoader();

newMLoader.url=url;

tparent.removeChildAt(index);

tparent.addChildAt(newMLoader,index);

newMLoader.name=oldMLoader.name;

newMLoader.percentWidth=oldMLoader.percentWidth;

newMLoader.percentHeight=oldMLoader.percentHeight;

oldMLoader=newMLoader;

if(oldMLoader.parent is ViewStack){

(oldMLoader.parent as ViewStack).selectedIndex=index;

}else if(oldMLoader.parent is TabNavigator){

(oldMLoader.parent as TabNavigator).selectedIndex=index;

}

}
http://bbs.actionscript3.cn/redirect.php?tid=20622&goto=newpost

你可能感兴趣的:(PHP,css,Flex,bbs)