您是否需要在文档类上使用destroy / dispose方法?
假设我有一个包含以下内容的文档类
- mouse event listeners
- timers running and or enter_frame listeners
- class variables
我是否需要使用销毁或处置方法:
- removes event listeners
- stops timers
- nulls class variables
或者这只是我在其他对象(精灵,动画片段)中需要添加到Document类阶段的东西吗?
答案 0 :(得分:3)
作为一般规则,如果您的类的实例将被“丢弃”,那么拥有dispose()
方法是件好事。 Flash中没有finalize()
(与Java不同)所以你需要一个地方来清理它。
需要清理的内容:
......等等。
如果不这样做,最终可能会出现严重的内存泄漏。
答案 1 :(得分:3)
通常,您不需要拥有这样的方法,因为只要您的应用程序处于活动状态,文档类所代表的对象就会存在。但是,情况不一定如此。例如,如果你有“stub”swfs,你可能想要在卸载时清理它们。调用者可以在装载你的swf的Loader上调用unloadAndStop(对于flash player> = 10),但我认为清理它仍然是一个好主意。
执行此操作的一种简单方法是利用ADDED_TO_STAGE和REMOVED_FROM_STAGE事件。也就是说,无论何时将对象添加到舞台中,都要执行所需的所有初始化。当它被删除时,请进行清理。像这样:
import flash.display.MovieClip;
import flash.events.Event;
public class YourDocClass extends MovieClip {
public function YourDocClass() {
addEventListener(Event.ADDED_TO_STAGE,setup);
addEventListener(Event.REMOVED_FROM_STAGE,cleanup);
}
private function setup(e:Event):void {
// your setup code here
}
private function cleanup(e:Event):void {
// your cleanup code here
}
}
请注意,您无需删除这两个事件侦听器。事实上,如果你只是让他们监听事件,你可以重用该对象(有时需要一点额外的关注,以保持你的对象处于一致状态;使用一个新的实例要简单得多,通常性能打你拿不是问题)