2011-01-26 124 views
2

我在類功能:評估之前應該對垃圾收集功能進行垃圾收集嗎?

private function fireItemCreated(data: ByteArray): void { 
    setTimeout(function(): void { 
     var event: ItemCreatedEvent = new ItemCreatedEvent(data); 
     dispatchEvent(event); 
    }, 1000); 
} 

此函數調用圖像縮略圖創建時派遣項目創建的事件。

但它延遲了一段時間的事件,以防止用戶界面凍結。而且我猜如果垃圾回收器在fireItemCreated函數調用之後但在定時器事件之前執行,會發生什麼情況。關閉是否會被刪除,或者它會一直運行直到它被執行?

回答

4

它不會發生。

如果調用該函數,則調用setTimeout。傳遞給setTimeout函數對象創建強封結合主機引擎與鏈接的執行上下文和所有setTimeout回調函數保護(強烈舉行)(想象一下,有一種無形的var timeouts = []你不能訪問)。如果定時器神奇地被邪惡的格里姆船長吞噬,那將不會很有趣。

好問題和快樂編碼。

問題描述可能實際上發生在一些其他語言和他們的計時器的實現。見.NET's Threading.Timer Class和筆記。

+0

非常感謝你的回答。它現在說得很清楚。我認爲在計時器事件後它會被GC消滅? – 2011-01-26 05:23:46