2012-12-09 39 views

回答

3

dispatch_sync到相同的隊列不僅無益,但它會鎖定您的應用程序。 dispatch_sync表示「派發某些東西,但不要繼續處理此隊列,直到其他隊列響應」。如果「其他」隊列(我們正在等待它完成調度的塊)與「this」隊列(它被阻塞,直到其他隊列響應)相同,那麼顯然不會發生這種情況。你的應用會凍結,等待自己!

另一方面,dispatch_async到目前爲止的同一隊列通常不是一個非常有用的構造,但至少它不會凍結。我看到一些尷尬的代碼,它使用dispatch_async作爲一種說法,「只要我完成了一系列操作,然後我想要做其他事情」。我很少看到這種調度與其自身的異步調度方式無法以另一種方式更優雅地完成,但我已經看到了。

+0

因此,如果我創建自己的隊列,那麼在該隊列上執行的任務將在不同的線程上完成? – mskw

+0

@mskw是的,這是正確的。 'dispatch'方法對於將一段代碼提交給一個單獨的隊列是非常有用的。一個非常典型的模式是當你做一些非常慢的事情時,你可以將它派發到你自己創建的隊列中(或者分派給dispatch_get_global_queue隊列中的一個隊列),當需要時更新UI(它總是必須在主隊列上完成),那麼你會從調度到該後臺隊列的代碼塊中將dispatch_async'更新回主隊列('dispatch_get_main_queue()')。 – Rob

+0

請參閱[如何在後臺處理調度異步過程](http://stackoverflow.com/questions/13624734/how-to-process-dispatch-async-process-in-background/13625739#13625739)模式。 – Rob

相關問題