2013-03-10 116 views
2

在我的應用程序委託的applicationDidBecomeActive:中,我檢查用戶登錄狀態的有效性,如果失敗則拋出登錄頁面。這項檢查涉及網絡調用,我擔心在惡劣的網絡環境下,它可能會阻止主要用戶界面,從而導致應用程序掛起。請問applicationDidBecomeActive:阻塞主線程?

從應用程序激活時的定時角度會發生什麼?在主線程上執行applicationDidBecomeActive: block/run的內容?我是否應該異步執行此網絡呼叫(例如,使用GCD)?

回答

8

applicationDidBecomeActive方法在主線程上像所有的UIKit方法一樣被調用。您必須始終確保您在後臺線程中執行任何長時間運行的進程或網絡訪問。

使用異步格式NSURLConnection或使用GCD在後臺隊列上執行操作。

2

您不應該在您的任何應用程序委託方法applicationDid...方法中執行同步網絡操作(當然,您不應該在程序中的任何位置執行同步網絡操作)。事實上,如果響應啓動/背景/恢復事件需要很長時間,iOS會終止您的應用。崩潰日誌將指出<Your app> failed to launch in time