复制内容到剪贴板
代码:
btn.onRelease = function() {
if (mc._height>0) {
mc.unloadMovie("2.swf");
trace(_root.mc.mouseListener);
Mouse.removeListener(mc.mouseListener);
} else {
mc.loadMovie("2.swf");
}
};将那个容器的代码改为这样的
建议看看这个说明:
复制内容到剪贴板
代码:
合理地管理事件。在调用侦听器之前,通过使用条件来检查侦听器是否存在(不为 null),从而保持事件侦听器数组的紧凑性。通过调用 clearInterval 来清除任何活动间隔,并通过调用 removeListener 来删除任何活动侦听器之后,再使用 unloadapplication 或 removeapplicationClip 删除内容。在卸载影片剪辑时,如果任何 ActionScript 函数仍引用 SWF 数据,则 Flash 不会回收 SWF 数据内存(例如,从间隔和侦听器回收)。
当不再需要变量时,请将其删除或将其设置为 null,这会对其进行标记以便进行垃圾回收。由于删除变量的操作可从 SWF 文件中删除不需要的资源,因而有助于在运行时优化内存使用。删除变量比将变量设置为 null 更好。
在进行垃圾回收之前,可通过调用 removeListener 从对象中显式删除侦听器。之前有朋友说了,删除了影片还是会这样,是因为鼠标还在帧听那个Object:mouseListener,所以并没有把所删除的这个mouseListener清除,而没调用一次,都var mouseListener了一个Object出来,所以看到“11111111”这个也就越来越多。
开始我也想到了是内存中这个mouseListener变量搞得鬼,手动delete mouseListener,也是没有作用的,后来查看了资料,说如果还有AS引用这个变量的话,虽然可以删除,但是还是可以应用的到:
复制内容到剪贴板
代码:
btn.onRelease = function() {
if (mc._height>0) {
mc.unloadMovie("2.swf");
delete _root.mc.mouseListener
trace("1:"+_root.mc.mouseListener);// trace为1:undefined
} else {
mc.loadMovie("2.swf");
}
};
//但是如果点击鼠标的话,还是会显示多个11111所以只能通过removeListener来实现,当removeListener完后,没有AS引用这个mouseListener这个Object的话,flash就会清楚这个变量
对于这种问题,大家应该看看flash垃圾回收方面的资料~