我在类里面有这个功能:
private function fireItemCreated(data: ByteArray): void {
setTimeout(function(): void {
var event: ItemCreatedEvent = new ItemCreatedEvent(data);
dispatchEvent(event);
}, 1000);
}
创建图像缩略图时调用此函数来调度项目创建事件。
但它会延迟事件一段时间以防止用户界面卡住。我猜测如果垃圾收集器在 fireItemCreated 函数调用之后但在计时器事件之前执行,会发生什么。闭包会被删除还是会一直保留到执行为止?
最佳答案
这不可能发生。
如果调用该函数,则调用 setTimeout
。传递给 setTimeout
的函数对象使用链接的执行上下文和所有 setTimeout
回调创建一个强闭包绑定(bind)函数受到主机引擎的保护(强烈保留)(想象一下有一个您无法访问的不可见的 var timeouts = []
)。如果计时器被邪恶的 Grime 船长神奇地吞掉了,那可就不好玩了。
问得好,编码愉快。
所描述的问题可能实际上发生在其他一些语言及其计时器实现中。请参阅.NET's Threading.Timer Class和注释。
关于apache-flex - 该函数在评估之前会被垃圾收集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801511/