主线程的Dispatch_sync使用主线程的队列无用吗?

时间:2012-12-09 03:05:24

标签: objective-c ios multithreading

我只想确认我的理由,即使用主队列从UI线程(主线程)执行dispatch_sync是完全没用的。

除此之外,async也同样没用,但是它有用,因为它不会阻塞。

让我知道。

由于

1 个答案:

答案 0 :(得分:3)

dispatch_sync到同一个队列不仅无用,而且会锁定您的应用。 dispatch_sync表示“发送一些内容,但在另一个队列响应之前不要继续执行此队列”。如果“其他”队列(我们正在等待它完成调度的块)与“this”队列相同(在其他队列响应之前被阻塞),这显然不会发生。你的应用会冻结,等待自己!

另一方面,dispatch_async到你当前所在的同一队列通常不是一个非常有用的结构,但至少它不会冻结。我已经看到一些笨拙的代码使用dispatch_async作为一种说法,“一旦我完成了一系列的操作,我就想做其他事情”。我很少看到这种异步调度在另一种方式无法更优雅地完成的情况下,但我已经看到了它。