局部变量的 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 变量。
如果函数中的局部变量注册了一些事件监听器,有没有办法删除那个事件监听器?事件监听器触发后,该变量会被垃圾回收吗?
示例代码:
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 变量。