因为AS3的垃圾回收是自动的,如果你某个对象存在被引用,或者有没有被清除的事件侦听,当你unload 和 removedChild时都不能彻底的从内存中移除它。
所以我们在写代码的时候一定要记得:
声明了一个变量或引用要记得及时清空,如:
var _mc=_movieClip
......
_mc=null
如果有一个数组,里面保存的是许多其他对象的引用,那么光设置这个数组为null是不行的,还要设置其每一个元素的值也为空arr[i]=null,比如
var _arry:Array=new Array();
for (var i=0; i<_mc.numChildren; i++) {
var _mc = _mc.getChildAt(i) as MovieClip;
arry.push(_mc);
}
clear:
for (var i=0; i<_arry.length; i++) {
_arry[i] = null;
}
_arry = [];
2、事件侦听也要及时清除。
具体看一段代码片段:
function removeSelf(e:Event):void {
trace("remove me now....");
removeEventListener(Event.ADDED_TO_STAGE, addStage);
stage.removeEventListener(gamestate.GAMEBOX_NOTICE_CLOSED, toReady);
removeEventListener(Event.REMOVED_FROM_STAGE, removeSelf);
_lostTimer.removeEventListener(TimerEvent.TIMER, setLeftTime);
try {
new LocalConnection.connect("foo");
new LocalConnection.connect("foo");
} catch (error:Error) {
}
System.gc();
}
addEventListener(Event.REMOVED_FROM_STAGE,removeSelf);//当元件被移除舞台时
3、还有强制垃圾回收。
try {
new LocalConnection .connect("foo");
new LocalConnection .connect("foo");
} catch (error:Error) {
}
System.gc();
4625

被折叠的 条评论
为什么被折叠?



