局部变量的 AS3 垃圾收集

AS3 Garbage collection on Local Variables

如果函数中的局部变量注册了一些事件监听器,有没有办法删除那个事件监听器?事件监听器触发后,该变量会被垃圾回收吗?

示例代码:

Class A{

function init(){
    var _loader = new URLLoader();
    _loader.addEventListener(Event.COMPLETE, complete);
}

function complete(e:Event){
//How to remove the event listner here on _loader since it is a local variable in init() and not an instance variable. 
//Will _loader be ever garbage collected?
}

}

如果 _loader 是一个实例变量,我们可以在 complete 处理函数中引用它并删除它上面的事件列表,让它被垃圾收集。 _loader 等局部变量会怎样?

可以使用事件对象的currentTarget:

function complete(e:Event):Void {
   URLLoader(e.currentTarget).removeEventListener(Event.COMPLETE, complete);
}

此外,请注意局部变量和事件侦听器。理论上(这么说是因为我一直无法找到关于它的官方文档)一旦你的函数到期,你的加载程序变量将有资格进行垃圾收集。当然,在大多数情况下,这不会立即发生,因此您的听众会正常触发。但我仍然会把它设为 class 变量。