局部变量上的AS3垃圾收集

时间:2015-06-18 21:53:29

标签: actionscript-3 flash garbage-collection

如果函数中的局部变量注册了某些事件列表器,是否有办法删除该事件列表器?在事件列表器触发后,该变量是否会被垃圾收集?

示例代码:

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处理函数中引用它并删除它上面的eventlistner,让它被垃圾收集。局部变量如_loader会发生什么?

1 个答案:

答案 0 :(得分:2)

您可以使用事件对象的currentTarget:

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

另外,请注意局部变量和事件侦听器。从理论上讲(因为我无法找到关于它的官方文档),一旦函数到期,你的loader变量就有资格进行垃圾收集。当然,在大多数情况下,这不会立即发生,所以你的听众会解雇。但我仍然会把它变成一个类变量。