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

2018-08-20  本文已影响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(@"三个都完成");

    });

上一篇 下一篇

猜你喜欢

热点阅读