對於我面臨的情況,我有一個小問題。 我有2種方法:使用callback = concurrency執行選擇器?
- (void)firstSelector {
[self launchAsyncTask];
... do some work for a long time (10secs) ...
}
- (void)asyncTaskFinished {
... some work after 5secs of async task ...
}
firstSelector
執行launchAsyncTask
這僅僅是有一個名爲asyncTaskFinished
回調後臺任務。 假設firstSelector
在啓動異步任務(假設爲10秒)後運行一段時間,並且異步任務運行5秒,是否會出現併發問題?
這是如何工作的? 將在firstSelector
後執行asyncTaskFinished
,否則firstSelector
會暫停運行asyncTaskFinished
?
是否存在與運行循環的鏈接?方法被添加到一個隊列,然後執行,因爲我打電話給他們?
我迷路了:)
謝謝。
您是否閱讀過文檔http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html?我相信它解釋了一切,直到你有任何具體的問題。 –
據我所知,我的回調隊列使用主線程運行循環,但firstSelector呢?我使用標準的「[self firstSelector]」來執行它。它也是這樣排隊? –
'回調'通常在與主'操作'相同的線程中被觸發,它可能是任何線程,而不僅僅是主線程。由於您沒有討論的代碼,通常可能的情況是'firstSelector'是從分離的線程中調用的,'launchAsyncTask'也會創建另一個後臺線程。或者它們可能與它們的主要/分離線程相同,或者它們中的一個在主線程中,另一個線程在分離的線程中。您也可能決定始終在主線程上觸發回調。這一切都是由設計驅動的,並且始終需要記錄良好,因爲每種情況都不相同。 –