1
我只是想確認我的推理,使用主隊列從UI線程(主線程)執行dispatch_sync完全沒用。使用主線程隊列的主線程Dispatch_sync無用?
爲了補充一點,異步將是無用的,但有一個幻想,它是有用的,因爲它不會阻止。
讓我知道。
感謝
我只是想確認我的推理,使用主隊列從UI線程(主線程)執行dispatch_sync完全沒用。使用主線程隊列的主線程Dispatch_sync無用?
爲了補充一點,異步將是無用的,但有一個幻想,它是有用的,因爲它不會阻止。
讓我知道。
感謝
的dispatch_sync
到相同的隊列不僅無益,但它會鎖定您的應用程序。 dispatch_sync
表示「派發某些東西,但不要繼續處理此隊列,直到其他隊列響應」。如果「其他」隊列(我們正在等待它完成調度的塊)與「this」隊列(它被阻塞,直到其他隊列響應)相同,那麼顯然不會發生這種情況。你的應用會凍結,等待自己!
另一方面,dispatch_async
到目前爲止的同一隊列通常不是一個非常有用的構造,但至少它不會凍結。我看到一些尷尬的代碼,它使用dispatch_async
作爲一種說法,「只要我完成了一系列操作,然後我想要做其他事情」。我很少看到這種調度與其自身的異步調度方式無法以另一種方式更優雅地完成,但我已經看到了。
因此,如果我創建自己的隊列,那麼在該隊列上執行的任務將在不同的線程上完成? – mskw
@mskw是的,這是正確的。 'dispatch'方法對於將一段代碼提交給一個單獨的隊列是非常有用的。一個非常典型的模式是當你做一些非常慢的事情時,你可以將它派發到你自己創建的隊列中(或者分派給dispatch_get_global_queue隊列中的一個隊列),當需要時更新UI(它總是必須在主隊列上完成),那麼你會從調度到該後臺隊列的代碼塊中將dispatch_async'更新回主隊列('dispatch_get_main_queue()')。 – Rob
請參閱[如何在後臺處理調度異步過程](http://stackoverflow.com/questions/13624734/how-to-process-dispatch-async-process-in-background/13625739#13625739)模式。 – Rob