iOS开发网络篇:GCD实战之多个网络请求的并发
来源:互联网 发布:skiller软件 编辑:程序博客网 时间:2024/05/16 19:42
GCD实战之多个网络请求的并发
第一种GCD 方式:
// 创建信号量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); // 创建全局并行 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, ^{ // 请求一 [loginCode getUserInfoWithNick:nil andUserId:kUserId onSuc:^(id data) { NSLog(@"yue"); dispatch_semaphore_signal(semaphore); } andFail:^(NSError *error) { }]; }); dispatch_group_async(group, queue, ^{ // 请求二 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) { NSLog(@"duihuan11"); dispatch_semaphore_signal(semaphore); } onFailure:^(NSError *error) { }]; }); dispatch_group_async(group, queue, ^{ // 请求三 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) { NSLog(@"duihuan22"); dispatch_semaphore_signal(semaphore); } onFailure:^(NSError *error) { }]; }); dispatch_group_notify(group, queue, ^{ // 三个请求对应三次信号等待 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); //在这里 进行请求后的方法,回到主线程 dispatch_async(dispatch_get_main_queue(), ^{ //更新UI操作 }); });
第二种 通过请求数量计数
定义一个block
typedef void(^Complete)();
将block作为类的属性
@property (copy, nonatomic) Complete complete;
实现方式:
NSInteger requestCount = 0; //第一个网络请求 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) { NSLog(@"duihuan11"); requestCount++; if (self.complete) { self.complete(); } } onFailure:^(NSError *error) { }]; //第二个网络请求 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) { NSLog(@"duihuan22"); requestCount++; if (self.complete) { self.complete(); } } onFailure:^(NSError *error) { }]; //第三个网络请求 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) { NSLog(@"duihuan33"); requestCount++; if (self.complete) { self.complete(); } } onFailure:^(NSError *error) { }]; self.complete = ^{ //请求网络的数量等于3表示三个网络请求已完成 if (requestCount == 3) { //在这里 进行请求后的方法,回到主线程 dispatch_async(dispatch_get_main_queue(), ^{ //更新UI操作 }); } };
1 0
- iOS开发网络篇:GCD实战之多个网络请求的并发
- iOS开发系列--并行开发(处理多个网络请求并发的情况)
- iOS多线程与网络开发之多线程GCD
- iOS开发—处理多个网络请求并发的情况
- iOS 多个网络请求并发执行的解决方案
- iOS之利用GCD信号量控制并发网络请求
- iOS之利用GCD信号量控制并发网络请求
- iOS 多个网络请求并行/并发处理
- iOS 多个网络请求并行/并发处理
- iOS 多个网络请求并行/并发处理
- iOS 多个网络请求并行/并发处理
- iOS开发 ----- 网络请求
- iOS开发网络请求
- iOS开发-网络请求
- IOS-如何处理多个网络请求的并发的情况
- web开发-网络请求实战
- iOS网络开发:多个异步网络请求结束后再进行某些操作的方法
- 处理多个网络请求的并发的情况
- spring-IOC容器bean生命周期
- Android Dialog中的EditText 弹出软键盘
- gbdt和xgboost区别
- php获取中文拼音的首个字母
- adapterViewFlipper 实现跑马灯效果使用动画出现的问题
- iOS开发网络篇:GCD实战之多个网络请求的并发
- Java生成控制台字符图像
- postgres数据库最大连接数
- Java中的随机数Random
- html在目标对象后追加内容
- 几种激活函数的比较
- Java获取Process进程ID,并杀掉相应的进程树
- 常见数据库操作经验-数据库函数-删除索引
- ATSHA204a加密芯片在TG401上的移植配置与使用