2013-02-06 80 views
0

當使用NSThreaddetachNewThreadSelector:toTarget:withObject:時,我發現如果用戶在後臺進程執行時試圖退出應用程序,那麼線程將在應用程序終止正常之前完全完成其執行。在應用程序退出之前,分離的NSThreads會始終完成嗎?

在這種情況下,這是我所期望的行爲,但我無法在Apple的文檔中找到任何暗示這總是如此的情況。唯一相關的信息我能找到的就是以下,從蘋果公司的Threading Programming Guide

重要信息:在應用程序退出時,脫離線程可以立即終止,但可連接線程不能。必須在允許退出進程之前連接每個可連接的線程。因此,在線程正在執行不應中斷的關鍵工作(如將數據保存到磁盤)的情況下,可連接線程可能更可取。

從這個

所以,我知道超脫線程可以在應用程序退出時被終止,但他們曾經將自動終止?或者,我是否安全地假定該線程在應用程序退出前會完成其執行?

回答

2

不管文檔如何,您都不能假定任何線程(包括主線程)都能正常完成執行。

這是因爲用戶可以隨時退出應用程序,系統可能會失去電源/恐慌,或者應用程序可能會崩潰。

至於分離的線程,系統框架在主事件循環放棄重影之後在一定超時後強制自動終止應用程序並不是聞所未聞。

+0

感謝您的解釋! – cky880

相關問題