iOS那些坑

如何同步若干个异步调用?(如根据若干个url异步加载多张图片,然

2017-03-21  本文已影响29人  zgsddzwj

GCD:
使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main Dispatch Queue中的结束处理的block。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{ /*加载图片1 / });
dispatch_group_async(group, queue, ^{ /
加载图片2 / });
dispatch_group_async(group, queue, ^{ /
加载图片3 */ });
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 合并图片
});

需要注意的:dispatch_group_wait是同步的所以不能放在主线程执行。
补充: dispatch_group会等和它关联的所有的dispatch_queue_t上的任务都执行完毕才会发出同步信号(dispathc_group_notify的代码块block会被执行,group_wait会结束等待)。也就是说一个group可以关联多个任务队列;下面给出示例:

上一篇下一篇

猜你喜欢

热点阅读