2012-12-09 37 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

相关问题