Monthly Archives: 七月 2009

在Flex中继承ProgrammaticSkin类自定义皮肤

通过自定义类的方式创建皮肤,控制性更强,占用的内存更少。 ProgrammaticSkin类是外观元素的基类,它们通过编程方式来绘制自身。 关于ProgrammaticSkin类的更多信息,猛击这里: http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html 自定义类 package skins { import flash.display.GradientType; import flash.display.Graphics; import mx.skins.ProgrammaticSkin; public class CustomBG extends ProgrammaticSkin { public function CustomBG() { super(); } override protected function updateDisplayList(w:Number, h:Number):void { super.updateDisplayList(w, h); var g:Graphics = graphics; var fillColors:Array = [0x191919,0x262626,0x191919]; var fillAlphas:Array = [1.0,1.0,1.0]; var fillRatios:Array = [0,127,255] g.clear(); drawRoundRect(0, 0, w, h, [...]

Flex 中可能导致内存泄露的地方

收集了不少的会导致内存泄露的情况: 事件监听: 对父级对象加了监听函数,会造成内存泄露,例: override protected function mouseDownHandler(…):void { systemManager.addEventListener(“mouseUp”, mouseUpHandler); …… } 解决: 在销毁对象的时候,remove掉这些监听,虽然弱引用也可以避免这些问题,但自己掌控感觉更好。 但以下几种情况不会造成内存泄露: 弱引用:someObject.addEventListener(MouseClick.CLICK, handlerFunction, false, 0, true); 对自己的引用:this.addEventListener(MouseClick.CLICK, handlerFunction); 子对象的引用: private var childObject:UIComponent = new UIComponent; addChild(childObject); childObject.addEventListener(MouseEvent.CLICK, clickHandler); 总之…有addEventListener,就removeEventListener一下吧,要为自己做的事负责~哈哈 清除引用 remove掉子对象后并不会删除该对象,他还保留在内存中,应该将引用设置为null removeChildren(obj); obj = null;