GCD使用-同一个界面多个请求结束在做下一步操作的总结
博客专区 > RainOrz 的博客 > 博客详情
GCD使用-同一个界面多个请求结束在做下一步操作的总结
RainOrz 发表于10个月前
GCD使用-同一个界面多个请求结束在做下一步操作的总结
  • 发表于 10个月前
  • 阅读 33
  • 收藏 1
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: dispatch_group_enter:通知group,下面的任务马上要放到group中执行了。 dispatch_group_leave:通知group,任务完成了,该任务要从group中移除了。

dispatch_group_enter:通知group,下面的任务马上要放到group中执行了。

dispatch_group_leave:通知group,任务完成了,该任务要从group中移除了。

基于enter和leave,可以实现

demo中的需求是 两个网络请求可有可无都是判断往下一步走的条件,如果两个都是NO,则不判断直接走下一步,思路就是,在每一个网络请求结束之后,返回一个状态

#pragma mark - 网络请求 同步
- (void)loadRequest:(BOOL)firAdd secAdd:(BOOL)secAdd
{
    __block int ifRefresh = 0;

    dispatch_group_t dispatchGroup = dispatch_group_create();
    if (firAdd) {
        dispatch_group_enter(dispatchGroup);
        [self httpRequest:^{
            NSLog(@"第一个请求完成成功");
            
            ifRefresh ++;
            
            dispatch_group_leave(dispatchGroup);
            
        } fail:^{
            NSLog(@"第一个请求完成失败");
            dispatch_group_leave(dispatchGroup);
        }];
    }
    if (secAdd) {
        dispatch_group_enter(dispatchGroup);
        [self httpRequestNum:^{
            NSLog(@"第二个请求完成成功");
            
            ifRefresh ++;
            
            dispatch_group_leave(dispatchGroup);
        } fail:^{
            NSLog(@"第二个请求完成失败");
            dispatch_group_leave(dispatchGroup);
        }];
    }
    
    dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){
       
        NSLog(@"请求完成");
        if (ifRefresh == ((firAdd?0:1)+(secAdd?0:1))) {
            NSLog(@"刷新");
        }
        else
        {
            NSLog(@"不刷新");
        }
        
    });
}

代码如下:

-(void)httpRequest:(void (^)(void))succ fail:(void (^)(void))fail{
    
    if (num>5) {
        succ();
    }
    else{
        fail();
    }
    
}
-(void)httpRequestNum:(void (^)(void))succ fail:(void (^)(void))fail{
    
    sleep(5);
    
    if (num>5) {
        succ();
    }
    else{
        fail();
    }
    
}

此处用随机数模拟是否成功失败,sleep5当做网络请求的延时,无论成功失败,都要返回,告知请求结束。

 

项目参考代码:https://github.com/Rain-wz/asynTest.git

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 7
博文 69
码字总数 34115
×
RainOrz
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: