美文网首页乔帮主的遗产iOS开发技能iOS开发
iOS 使用dispatch_group_enter使多次网络请

iOS 使用dispatch_group_enter使多次网络请

作者: 闻人歌 | 来源:发表于2018-09-18 16:37 被阅读994次

    常用的几个方法

    • dispatch_group_enter :通知 group,下个任务要放入 group 中执行了
    • dispatch_group_leave: 通知 group,任务成功完成,要移除,与 enter成对出现
    • dispatch_group_wait: 在任务组完成时调用,或者任务组超时是调用(完成指的是enter和leave次数一样多)
    • dispatch_group_notify: 只要任务全部完成了,就会在最后调用

    具体情况分析

    详见:dispatch_group_enter 使用与讲解

    实际应用

    在我们的项目中,在一个 VC 中会有多个网络请求A,B.现在要实现的是:A 请求数据成功之后,再执行 B 的网络请求.这时候,我们就可以使用dispatch_group_enter了

    // A 请求数据
    - (void)loadADataFinished:(void(^)(BOOL success))finished;
    // B 请求数据
    - (void)loadBDataFinished:(void(^)(BOOL success))finished;
    // 请求是否全部完成
    - (void)finishedDataFinished:(void(^)(BOOL success))finished{
      dispatch_group_t group = dispatch_group_create();
      
      dispatch_group_enter(group);
      [self loadADataFinished:^(BOOL success){
        if (success){
          dispatch_group_leave(group);
        }else{
          finished(NO);
        }
      }];
      dispatch_group_enter(group);
      [self loadBDataFinished:^(BOOL success){
        if (success){
          dispatch_group_leave(group);
        }else{
          finished(NO);
        }
      }]; 
      //  group 中的任务都成功完成后,才会返回 YES
      dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            finished(YES);
       });
    }
    

    相关文章

      网友评论

        本文标题:iOS 使用dispatch_group_enter使多次网络请

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