iOS面试题 GCD部分

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







你可能感兴趣的:(iOS面试题 GCD部分)