美文网首页iOS开发备忘录
iOS开发-多线程GCD处理多个网络请求的并发

iOS开发-多线程GCD处理多个网络请求的并发

作者: 铁头娃_e245 | 来源:发表于2019-03-01 17:01 被阅读0次

在项目中经常会遇到多个网络请求需要并发执行的需求,我们可以通过GCD提供的dispatch_group+dispatch_group_enter+dispatch_group_leave的方式实现并发执行的网络请求

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 追加任务1
        dispatch_group_enter(group);   //标志着一个任务追加到 group,执行一次,相当于 group 中未执行完毕任务数+1
        //这里使用延迟方法来模拟网络请求时间,需要注意真实的网络请求无论成功或失败都需要调用dispatch_group_leave(group)方法任务数减一
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            dispatch_group_leave(group);   //标志着一个任务离开了 group,执行一次,相当于 group 中未执行完毕任务
        });
    });

    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 追加任务2
        dispatch_group_enter(group);   //group 中未执行完毕任务数+1
         //这里使用延迟方法来模拟网络请求时间
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            dispatch_group_leave(group);   //标志着一个任务离开了 group,执行一次,相当于 group 中未执行完毕任务
        });
    });

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        // 等前面的异步任务1、任务2都执行完毕后,回到主线程执行下边任务
        [self.tableView reloadData];
    });

多线程相关的知识请参考博客
iOS 多线程:『GCD』详尽总结

相关文章

网友评论

    本文标题:iOS开发-多线程GCD处理多个网络请求的并发

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