iOS开发备忘录

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

2019-03-01  本文已影响0人  铁头娃_e245

在项目中经常会遇到多个网络请求需要并发执行的需求,我们可以通过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』详尽总结

上一篇 下一篇

猜你喜欢

热点阅读