美文网首页
GCD实现多个异步网络请求效果

GCD实现多个异步网络请求效果

作者: 恋家的人走不丢 | 来源:发表于2018-04-25 11:31 被阅读0次

    1、使用dispatch_semaphore_t实现多个异步网络请求同步效果(信号量来控制)

        1.1 dispatch_semaphore_tsemaphore = dispatch_semaphore_create(1)// 创建信号量,并且设置值为1,则进行同步操作

        1.2 dispatch_queue_t queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);//创建异步线程

        1.3 此时我们可以将多个网络请求放到异步线程中进行实现,在网络请求的block后面(切勿写在网络请求返回结果的地方),使用 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);作用是将信号量-1,阻塞线程。当我们网络请求block返回数据处理完毕后,记得使用 dispatch_semaphore_signal(semaphore);此方法作用为信号量+1,线程继续往下走,此时便可以将多个异步网络请求,实现同步效果。

    2、使用dispatch_group_create(栅栏)实现多个异步网络请求,最后进行拦截的效果

        2.1    dispatch_group_t group = dispatch_group_create();//创建队列组

        2.2    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//创建异步队列

        2.3    dispatch_group_enter(group);//进入队列组

        2.4    此处进行异步网络请求,在网络请求返回结果的block里面(切记是block里面),使用dispatch_group_leave(group);表示离开了队列组。

        2.5    重复上面的操作,多个网络请求并发执行。

        2.6    dispatch_group_notify(group, queue, ^{    

                    进行拦截后的统一处理,加载视图等等

                  });

    相关文章

      网友评论

          本文标题:GCD实现多个异步网络请求效果

          本文链接:https://www.haomeiwen.com/subject/idulixtx.html