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, ^{
进行拦截后的统一处理,加载视图等等
});