在SO之前的一個問題之後,我現在正在比較兩個不同的宏中央調度隊列來試圖確定當前代碼是否在主線程上運行。我的問題很簡單:這是實現這一目標的有效方法嗎?還是有沒有這樣做,我沒有考慮到一些陷阱?這是比較兩個GCD隊列的正確方法嗎?
if (dispatch_get_current_queue() != dispatch_get_main_queue()) {
// We are currently on a background queue
} else {
// We are on the main queue
}
乾杯
感謝您的詳細回答,澄清一點......我正在進行此檢查以確保UI代碼在正確的隊列上運行。經過我的檢查方法的缺陷,我理解UI代碼需要在主隊列而不是主線程上運行嗎?我一直認爲兩者是一樣的,顯然並不總是如此。 – Sammio2
反過來說,除非另有說明,任何與當前AppKit/UIKit對象交互的代碼都需要在主線程上運行。 – das
好吧,這就是我原先想的......那麼爲什麼每個教程都要在世界中(包括關於調度隊列的蘋果文檔)稱爲調用'dispatch_sync(dispatch_get_main_queue(),^ {...});'爲了運行GCD隊列中的UI代碼,如果主隊列不總是主線程? – Sammio2