据我所知,GCD UI操作应该始终在主线程/主队列上异步执行。但是下面的代码似乎也没有任何问题。有人可以解释一下原因吗? 我正在同步传递2个块到dispatch_async。一个块下载图像,另一个块在视图上显示。
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{
__block UIImage *image = nil;
dispatch_sync(concurrentQueue, ^{
/* Download the image here */
});
dispatch_sync(dispatch_get_main_queue(), ^{
/* Show the image to the user here on the main queue */
});
});
答案 0 :(得分:0)
队列很重要(它必须是主队列)但是gcd调用是同步还是异步是无关紧要的 - 这只会影响gcd调用周围的其余代码的定时方式。一个块在队列上运行时,它的安排并不重要。
同步调度可以简化您的代码(因为它不会在执行块之前返回),但如果您最终等待完成任务,则会带来锁定风险。