我使用大中央調度在Objective-C使用下面的代碼發起非同步線程:iOS爲什麼不從子線程工作中退出主線程中的方法?
dispatch_queue_t myQueue = dispatch_queue_create("My Queue",NULL);
dispatch_async(myQueue, ^{
}
因爲我遇到了麻煩,正確地退出觸發這個IBAction爲一個很長的時間。我做了很多的代碼在主線程中使用此代碼這個GCD線程內包裝:
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
}
我最初試圖做的就是簡單地把回報;這個mainQueue塊內的語句。經過大量的擺弄之後,我發現打破了包含所有這些回報的IBAction;需要在GCD隊列中。
這是爲什麼?我認爲無論程序在哪裏,返回都會退出。另外,是否有可能從這樣的嵌套隊列中退出?
你在不同的線程中運行什麼工作?網絡代碼?廣泛的操作等? 如果你要使用不同的線程,你應該期待代碼稍後完成,響應完成應該通過回調方法等。只是因爲你已經在主線程中包裝了一些代碼,並不意味着它會運行直接 –
@Naughty_Ottsel查看我是否應該返回的檢查是啓動異步線程後的第一個動作。任何網絡密集的東西都是在之後完成另外,主隊列在檢查後直接調用,看看它是否應該返回,所以在調用之前不應該有太多延遲。在我找到它應該去的地方之前,在主要隊列中的返回檢查也是該區塊的第一個動作,所以希望不會有任何延遲。 –
理論上,在異步線程中運行主代碼應該是安全的。在我看來,你應該通過另一個GCD塊運行主線程代碼。我認爲NSOperation代碼是一種「得到補充並最終運行」的代碼,GCD具有更高的優先級。 FYI: dispatch_async(dispatch_get_main_queue(),^ {}); –