美文网首页01『 OC 知识 』04『 网络相关 』
iOS开发 - 如何确定多个接口的数据都已请求完成?

iOS开发 - 如何确定多个接口的数据都已请求完成?

作者: Li_Cheng | 来源:发表于2019-12-21 17:42 被阅读0次

引言:

在日常开发中经常会遇到 需要同时请求多个接口, 在多个接口同时请求完成时再做相关业务处理。

可以使用GCD中的信号量来实现。

I. 实现代码


#pragma mark - 加载数据

- (void)loadDataSuccess:(void (^)(void))success
                failure:(void (^)(NSString *errorMessage))failure {
    
    // 3个接口,全部请求成功后刷新tableView
    NSInteger totalCount = 3;
    __block NSInteger requestCount = 0;
    
    //初始化一个信号量 值为0
    dispatch_semaphore_t sem = dispatch_semaphore_create(0);
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        /// 请求1
        // 请求成功时加入下面代码
        
        // 请求成功 requestCount+1 后 与 totalCount 比较 相等时 说明3个请求都已经完成, 信号量加1
        if (++requestCount == totalCount) {
            
            dispatch_semaphore_signal(sem); // 提高信号量  信号量加1
        }
        
        
        /// 请求2
        // 请求成功时加入下面代码
        if (++requestCount == totalCount) {
            dispatch_semaphore_signal(sem);
        }
        
        /// 请求3
        // 请求成功时加入下面代码
        if (++requestCount == totalCount) {
            dispatch_semaphore_signal(sem);
        }
        
        // 等待降低信号量
        // sem = 0 时,函数会阻塞当前线程 等待 timeout 后
        // sem > 0 时,该函数所处线程会继续执行下面语句,并将信号量减1
        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
        
        // 信号量大于0时 会执行下面代码
        dispatch_async(dispatch_get_main_queue(), ^{
            
            /// 所有请求完成
            // 实现回调
            success();
        });
    });
}

相关文章

  • iOS开发 - 如何确定多个接口的数据都已请求完成?

    引言:在日常开发中经常会遇到 需要同时请求多个接口, 在多个接口同时请求完成时再做相关业务处理。 可以使用GCD中...

  • Swift 4.0 学习笔记 - 调度组 DispatchGro

    一、概述 我们在实际开发过程中,一个页面可能需要请求多个接口,最后等到所有接口数据都请求完成后,再执行创建 UI ...

  • 信号量(dispatch_semaphore_t)- 实现一个页

    目标:实现一个页面多个请求 我们经常遇到这样的情况:例如用户界面的数据展示 里面有多个接口,我们数据请求完成之后展...

  • iOS多线程 接口同步

    场景:一个页面有多个接口 需要等多个接口全都请求完成之后再刷新UI reloadData. 1:串行请求,接口嵌套...

  • iOS 多个后台接口 颜色 图片 国际化等配置你确定会集中管理.

    iOS 多个后台接口 颜色 图片 国际化等配置你确定会集中管理.... 引言在iOS开发过程中一边会遇到后台接口会...

  • 使用本地数据模拟网络请求

    Get请求: 在开发的时候,当后台还没有开发完成时。我们可以用本地的数据来模拟网络请求,这样待后台接口完成时,...

  • 前端mock数据

    前后端并行开发时,前端页面需要接口数据动态渲染,此时后端接口未开发完成,这时前端可以模拟接口请求。本文主要介绍在不...

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

    使用场景 在iOS开发过程中,当我们需要同时异步请求多个接口,在所有接口全部响应后才能执行后续操作时,我们可...

  • 2019-03-19

    ①接口响应时间与渲染顺序的关联(调用多个接口请求数据) ②reset,开发合规组织体系的时候重复造了reset这个...

  • 网络请求

    ios开发 合理封装请求接口 概述 如今大多的app都会与网络打交道,作为开发者 合理的对网络后台请求接口进行封装...

网友评论

    本文标题:iOS开发 - 如何确定多个接口的数据都已请求完成?

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