从并发队列同步在主线程上执行UI更新

时间:2015-03-29 07:25:29

标签: ios objective-c multithreading concurrency grand-central-dispatch

据我所知,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 */
    }); 
});

1 个答案:

答案 0 :(得分:0)

队列很重要(它必须是主队列)但是gcd调用是同步还是异步是无关紧要的 - 这只会影响gcd调用周围的其余代码的定时方式。一个块在队列上运行时,它的安排并不重要。

同步调度可以简化您的代码(因为它不会在执行块之前返回),但如果您最终等待完成任务,则会带来锁定风险。