//dispatch_async函数将指定的Block"非同步"的追加到指定的Dispatch Queue中,dispatch_async函数不作任何等待。
//dispatch_sync函数将指定的Block"同步"追加到指定的Dispatch Queue中。在追加Block结束之前,dispatch_sync函数会一直等待。即一旦调用dispatch_sync函数,那么在指定的处理执行结束之前,该函数不会返回。
//dispatch_sync函数出现的死锁问题:
//a.该源代码在Main Dispatch Queue即主线程中执行指定的Block,并等待其执行结束。而其实主线程中正在执行这些源代码,所以无法执行追加到Main Dispatch Queue 的Block。
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
NSLog(@"hello");
});
//b.Main Dispatch Queue中执行的Block等待Main Dispatch Queue中要执行的Block执行结束
dispatch_queue_t queue2 = dispatch_get_main_queue();
dispatch_async(queue2, ^{
dispatch_sync(queue2,^{
NSLog(@"hello");
});
});
//c.Serial Dispatch Queue 也会引起相同的问题
dispatch_queue_t queue3 = dispatch_queue_create("Dispatch Queue的名称", NULL);
dispatch_async(queue3, ^{
dispatch_sync(queue3, ^{
NSLog(@"hello");
});
});