Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 是否删除局部变量的事件侦听器?_Actionscript 3_Garbage Collection - Fatal编程技术网

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变量是本地变量,但由于按钮出现在将侦听事件的显示对象上。希望有帮助。变量超出范围并不总是意味着引用无效。除局部变量外,可能还有其他对对象的引用。显示对象容器具有对其子对象的引用。因此,如果使用局部变量创建显示对象,请将其添加到容器中。然后,局部变量超出范围,但容器具有对子对象的引用,只要容器有效,该引用就是有效的。所以这个孩子的事件监听器在这个例子中也是有效的。哇,这解释了很多,谢谢。我一直以为你不用担心,我猜我的虫子就是从这里来的…呵呵。