从字面意思上看,sync 同步,async 异步。
- 并行队列 + 异步 = 异步
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
- 并行队列 + 同步 = 同步
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
顺序执行
- 串行队列 + 同步
dispatch_sync(dispatch_get_main_queue(), ^{
});
主线程是一个同步队列,里面加一个同步任务,线程锁死。老一些的iOS版本直接会闪退,新一些的版本block中的代码块将不会被执行,但未闪退。总之这样做是有问题的。需要判断处理:
if ([[NSThread currentThread] isMainThread])
{
// ...
}
else {
dispatch_async(dispatch_get_main_queue(), ^{
// ...
});
}
为了线程安全,做这样处理。