iOS开发之使用信号量实现AFN请求同步
2017-04-06 19:53
288 查看
需求: 假设三个请求,A,B,C。而且UI里面的数据必须要等到A,B,C全部加载完成之后刷新。使用三个单纯的AFN请求。
上面requestA、requestB、requestC加了信号量同时使用GCD多线程的调度组后,他们也是异步执行,执行的先后顺不会卡住主线程。当A、B、Crequest的信号量全部都释放后,就会通知group_notify并执行其操作。
希望我的解决办法能帮助到有这些相关需求的朋友。
dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self requestA]; }); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self requestB]; }); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self requestC]; }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ //刷新界面 }); - (void)requestA { dispatch_semaphore_t sema = dispatch_semaphore_create(0); [Request postWithURL:url params:params success:^(id response){ dispatch_semaphore_signal(sema); //处理response } failure:^(NSError *error) { dispatch_semaphore_signal(sema); //处理错误 }]; dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); } requestB和requestC同上。我这就不写了。 //还有一种情况就是,如果最后一个网络请求是依赖前面的所以请求 //这里需要这样改一下 dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //刷新界面 });
上面requestA、requestB、requestC加了信号量同时使用GCD多线程的调度组后,他们也是异步执行,执行的先后顺不会卡住主线程。当A、B、Crequest的信号量全部都释放后,就会通知group_notify并执行其操作。
希望我的解决办法能帮助到有这些相关需求的朋友。
相关文章推荐
- iOS开发之使用信号量实现AFN请求同步
- iOS开发之使用信号量实现AFN请求同步
- 使用GCD 信号量来实现iOS 同步网络请求
- iOS开发笔记之简单使用IJKMediaFramework实现视频直播
- 使用UItableview在iOS应用开发中实现好友列表功能
- IOS应用开发14——使用UICollectionView实现图片列表显示
- iOS开发之使用XMPPFramework实现即时通信(一)
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- iOS项目开发实战——使用同步请求获取网页源代码
- iOS开发 使用GCD实现多任务
- 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
- iOS开发使用Picker View实现一个图片浏览的App
- iOS 使用XMPP框架开发IM聊天模块,实现简单的文字聊天
- iOS项目开发实战——使用定时器实现循环操作
- iOS项目开发实战——使用CALayer实现图片的淡入淡出效果
- iOS开发 - OC - 实现本地数据存储的几种方式二(直接使用sqlite)
- iOS开发中Quartz2D绘图路径的使用以及条纹效果的实现
- iOS开发之使用UIimage+ImageEffects实现图片模糊效果
- iOS开发中使用UIScrollView实现图片轮播和点击加载
- IOS开发UI篇--使用CAShapeLayer实现一个音量大小动态改变的控件