Ste*_*fan 4 asynchronous objective-c synchronous ios dispatch-async
我很清楚 dispatch_async 队列正在执行什么,但我不清楚 dispatch_sync 的目的是什么。例如:这有什么区别:
NSLog(@"A");
NSLog(@"B");
Run Code Online (Sandbox Code Playgroud)
和这个:
dispatch_sync(dispatch_get_main_queue(), ^ {
NSLog(@"A");
});
NSLog(@"B");
Run Code Online (Sandbox Code Playgroud)
据我所知,两种方式的输出都是 A 然后是 B。因为同步是按照写入的顺序执行的。谢谢。
顾名思义,dispatch_sync即使它们不在主队列上执行,也可以同步要执行的任务。
Saheb Roy 的回答只是事实的一半。您只能指定应在其上执行代码的调度队列。实际线程由 GCD 选择。
在并发队列上使用 dispatch_async 调度的代码块也以 FIFO 方式执行,并保证按照您调度它们的顺序执行。的主要区别是在串行队列dispatch_sync也保证你之前的前一个块已完成执行下面的代码块不执行。dispatch_sync正在阻塞您当前的调度队列,即执行 dispatch_sync 调用的队列。所以你的调用函数被阻塞,直到分派的代码块返回,而dispatch_async立即返回。
dispatch_async在并发队列上使用的执行时间线我看起来像这样:
A 区 [........]
B 区 [.....]
C 区 [..]
在dispatch_sync串行队列上使用时如下所示:
A 区 [........]
B 区 [.....]
C 区 [..]
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |