1、GCD的队列(dispatch_queue_t)分哪两种类型?
答:串行队列Serial Dispatch Queue
并行队列Concurrent Dispatch Queue
2、如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图)
答:使用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(), ^{
// 合并图片
});
3、dispatch_barrier_async的作用是什么?
答:在并行队列中,为了保持某些任务的顺序,需要等待一些任务完成后才能继续进行,使用 barrier 来等待之前任务完成,避免数据竞争等问题。
详解:http://www.cnblogs.com/zhidao-chen/p/3598161.html
4、苹果为什么要废弃dispatch_get_current_queue?
答:dispatch_get_current_queue容易造成死锁 详细链接:http://blog.csdn.net/ej_paradise/article/details/50375004