美文网首页
iOS开发多个异步请求全部完成问题

iOS开发多个异步请求全部完成问题

作者: 暴走的威仔 | 来源:发表于2018-08-20 16:02 被阅读0次

使用场景

       在iOS开发过程中,当我们需要同时异步请求多个接口,在所有接口全部响应后才能执行后续操作时,我们可以用dispatch_group_t分组来实现。

原理

        其实原理就是每一次添加一个请求就添加一个信号,成功或失败就减一个信号,直到最后分组中添加的信号与减去的信号一致时,执行dispatch_group_notify。

实现

dispatch_group_t dispatchGroup = dispatch_group_create();//创建信号组

    //第一个请求

    dispatch_group_enter(dispatchGroup);

    [[HCAFN setAFNObject]GET:@"home/listArticle" parameters:param progress:^(NSProgress * _Nonnull downloadProgress){

    } success:^(NSURLSessionDataTask * _Nonnull task,id  _Nullable responseObject){

        dispatch_group_leave(dispatchGroup);

        NSLog(@"第一个");

    } failure:^(NSURLSessionDataTask * _Nullable task,NSError * _Nonnull error){

        dispatch_group_leave(dispatchGroup);

    }];

    //第二个请求

    dispatch_group_enter(dispatchGroup);

    [[HCAFN setAFNObject]GET:@"home/listArticle" parameters:param progress:^(NSProgress * _Nonnull downloadProgress){

    } success:^(NSURLSessionDataTask * _Nonnull task,id  _Nullable responseObject){

        dispatch_group_leave(dispatchGroup);

        NSLog(@"第二个");

    } failure:^(NSURLSessionDataTask * _Nullable task,NSError * _Nonnull error){

        dispatch_group_leave(dispatchGroup);

    }];

    //第三个请求

    dispatch_group_enter(dispatchGroup);

    [[HCAFN setAFNObject]GET:@"home/listArticle" parameters:param progress:^(NSProgress * _Nonnull downloadProgress){

    } success:^(NSURLSessionDataTask * _Nonnull task,id  _Nullable responseObject){

        dispatch_group_leave(dispatchGroup);

        NSLog(@"第三个");

    } failure:^(NSURLSessionDataTask * _Nullable task,NSError * _Nonnull error){

        dispatch_group_leave(dispatchGroup);

    }];

    dispatch_group_notify(dispatchGroup,dispatch_get_main_queue(),^(){

        NSLog(@"三个都完成");

    });

相关文章

网友评论

      本文标题:iOS开发多个异步请求全部完成问题

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