0
点赞
收藏
分享

微信扫一扫

iOS处理多个网络请求的先后(依赖)关系

快乐小码农 2021-09-19 阅读 35
iOS/swift

在iOS开发中我们经常会遇到多网络请求的问题,有时候需要在一个网络请求结束之后再去请求另一个网络,其实最简单也是最low的方法就是在一个网络请求成功的接口中再去请求另外一个接口信息

方式一

今天给你带来一个一个全新的方法,先说下原理:
使用的方法是使用它的信号量计数器

dispatch_semaphore_create(M)
创建一个值为M的信号量

dispatch_semaphore_wait(信号量,等待时间)
如果该信号量的值大于0,则使其信号量的值-1,否则,阻塞线程直到该信号量的值大于0或者达到等待时间。

dispatch_semaphore_signal(信号量)
释放信号量,使得该信号量的值加1
dispatch_group_t group = dispatch_group_create();
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
    for (int j = 0; j < 2; j ++) {
        dispatch_group_async(group, queue, ^{
            if (j == 0) {
                [self loadProductData:semaphore];
            }else {
                [self getUserCenterModel:semaphore];
            }
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        });
    }
    dispatch_group_notify(group, queue, ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.collectionView reloadData];
        });
        
    });
//请求方法中调用
-(void)loadProductData:(dispatch_semaphore_t)group {
      dispatch_semaphore_signal(group)
}

方式二

使用过程中创建一个group_t 之后每次进入之后调用enter方法,结束之后调用leave方法,需要几次enter就需要几次leave,之后notify中写它的方法,之后再回到主线程刷新scrollView

dispatch_group_t downGroup = dispatch_group_create();

dispatch_group_enter(downGroup);
dispatch_group_leave(downGroup);
dispatch_group_notify(downGroup, dispatch_get_main_queue(), ^{
        
});
举报

相关推荐

0 条评论