apache-flex - 该函数在评估之前会被垃圾收集吗?

标签 apache-flex flash actionscript-3 actionscript

我在类里面有这个功能:

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/

相关文章:

actionscript-3 - 为什么我不能在 AS3 中显示嵌入字体?

java - 0.99999999999相乘时可以四舍五入到1.0吗?

apache-flex - 相当于 <mx :HTML> Component 的 "View Source"

php - 如何使用 PHP 或 javascript 检测 Flash 版本?

ios - 视频结束后显示菜单

actionscript-3 - 处理AS3中的安全错误

apache-flex - 为什么 Flex 编译器在连续编译完全相同的源代码时会生成不同的文件大小?

apache-flex - 如何在运行时打印出对象内存地址?就像java中的this.toString()

apache-flex - Mxmlc 在同一源上生成不同的二进制文件

apache-flex - 弹性 : How to set hand cursor?