Actionscript 3 是否删除局部变量的事件侦听器?
是否必须删除具有局部作用域的变量上的事件侦听器?我的意思是…如果变量只在函数/方法运行时存在,那么事件侦听器是否仍然存在Actionscript 3 是否删除局部变量的事件侦听器?,actionscript-3,garbage-collection,Actionscript 3,Garbage Collection,是否必须删除具有局部作用域的变量上的事件侦听器?我的意思是…如果变量只在函数/方法运行时存在,那么事件侦听器是否仍然存在 private function startSomething():void { whatever.start(); var t:Timer = new Timer(2000,1); t.addEventListener(TimerEvent.TIMER, stopSomething, f
private function startSomething():void
{
whatever.start();
var t:Timer = new Timer(2000,1);
t.addEventListener(TimerEvent.TIMER, stopSomething, false, 0, true);
t.start();
}
private function stopSomething(e:TimerEvent):void
{
// do you have to remove the event listener here??
}
由于计时器只启动一次,因此无需删除侦听器。由于计时器只启动一次,因此无需删除侦听器。如果确实需要,可以执行以下操作:
Timer(e.currentTarget).removeEventListener(TimerEvent.Timer,stopSomething)代码>
几乎所有事件目标/currentTarget属性都引用触发器对象。如果确实需要,可以执行以下操作:
Timer(e.currentTarget).removeEventListener(TimerEvent.Timer,stopSomething)代码>
几乎所有event target/currentTarget属性都引用触发器对象。我也应该在回答中写下这一点,以防万一计时器重复+我应该在我的回答中也写上这个,以防万一计时器重复+我确实有一个相关的问题(上面添加了详细信息)…如果变量仅在第一个方法中“存在”,我是否需要担心删除该变量的事件侦听器??对于计时器,即使计时器变量超出范围,事件侦听器仍然有效。计时器事件在函数执行结束且变量超出范围后激发。所以,如果这是重复的,那么当您不再需要侦听器时,您应该按照Simsoft的答案中指定的方法删除侦听器。但是如果计时器没有重复,那么就没有必要了。显示对象也是如此。假设您已在现有显示对象上添加了一个按钮。button变量是本地变量,但由于按钮出现在将侦听事件的显示对象上。希望有帮助。变量超出范围并不总是意味着引用无效。除局部变量外,可能还有其他对对象的引用。显示对象容器具有对其子对象的引用。因此,如果使用局部变量创建显示对象,请将其添加到容器中。然后,局部变量超出范围,但容器具有对子对象的引用,只要容器有效,该引用就是有效的。所以这个孩子的事件监听器在这个例子中也是有效的。哇,这解释了很多,谢谢。我一直认为你不必担心它,我猜这就是我的bug的来源…呵呵。我确实有一个相关的问题(上面添加的细节)…如果变量只“存在”在第一个方法内部,我是否需要担心删除该变量的事件侦听器??对于计时器,即使计时器变量超出范围,事件侦听器也有效。计时器事件在函数执行结束且变量超出范围后激发。所以,如果这是重复的,那么当您不再需要侦听器时,您应该按照Simsoft的答案中指定的方法删除侦听器。但是如果计时器没有重复,那么就没有必要了。显示对象也是如此。假设您已在现有显示对象上添加了一个按钮。button变量是本地变量,但由于按钮出现在将侦听事件的显示对象上。希望有帮助。变量超出范围并不总是意味着引用无效。除局部变量外,可能还有其他对对象的引用。显示对象容器具有对其子对象的引用。因此,如果使用局部变量创建显示对象,请将其添加到容器中。然后,局部变量超出范围,但容器具有对子对象的引用,只要容器有效,该引用就是有效的。所以这个孩子的事件监听器在这个例子中也是有效的。哇,这解释了很多,谢谢。我一直以为你不用担心,我猜我的虫子就是从这里来的…呵呵。