美文网首页
【多线程】多个请求完成以后再执行其他操作

【多线程】多个请求完成以后再执行其他操作

作者: 大基本功 | 来源:发表于2018-06-19 14:46 被阅读31次

有时会出现这样一种情况,比如某个页面需请求多个接口获取数据后刷新UI界面,直接上代码使用GCD完成
1.完成数据后回调

- (void)getAdHotTopDataBaseRequestisScu:(void(^)(BOOL isScu))requestisScu{  
    WEAKBLOCK;  
    [self.topAddArray removeAllObjects];  
    NSString *urlStr = @"Ad/fx_top";  
    [LFNetWorkManager requestDataBaseWithURLByGET:urlStr parameters:nil isWithToken:NO completed:^(id responseObject) {  
        if([responseObject[@"code"] integerValue] == 200){  
             [ToosZFJ readAndWriteHomeListDataBase:responseObject fileName:[urlStr stringFromMD5] completed:nil];//这个是我写的缓存数据的方法  
            NSArray *data = responseObject[@"data"];  
            for (NSDictionary *dict in data) {  
                ADModel *model = [[ADModel alloc]init];  
                [model setValuesForKeysWithDictionary:dict];  
                model.mid = dict[@"id"];  
                if([dict[@"circle"] integerValue] == 1){  
                    //话题  
                }else{  
                    //头部轮播广告  
                    [weakSelf.topAddArray addObject:model];  
                }  
            }  
        }else{  
            [weakSelf SHOWPrompttext:responseObject[@"message"]];  
        }  
        if(requestisScu){  
            requestisScu((200 == [responseObject[@"code"] integerValue])?YES:NO);  
        }  
    }];  
}  

2.发起异步请求并监听

- (void)startAllRequest{  
    [self showMBProgressHUDLoding:nil];  
      
    
      
    dispatch_group_t group = dispatch_group_create();  
    dispatch_queue_t queue= dispatch_get_global_queue(0, 0);  
    // 广告数组  
    dispatch_group_enter(group);  
    dispatch_group_async(group, queue, ^{
             [self getAdHotTopDataBaseRequestisScu:^(BOOL isScu) {  
        dispatch_group_leave(group);  
    }];  
    });
    
      
    // 我的关注  
    dispatch_group_enter(group);  
    dispatch_group_async(group, queue, ^{
            [self getDataOfSOurcesFoucesRequestisScu:^(BOOL isScu) {  
        dispatch_group_leave(group);  
    }];  
    });
   
      
    // 推荐比赛  
    dispatch_group_enter(group);  
    dispatch_group_async(group, queue, ^{
           [self getDataSourcesCompareRequestisScu:^(BOOL isScu) {  
        dispatch_group_leave(group);  
    }];  
    });
    
      
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{  
        [weakSelf RemoveMBProgressHUDLoding:nil];  
        [weakSelf.collectionView reloadData];  
        [weakSelf endRefreshingForTableView:weakSelf.collectionView];  
    });  
} 

相关文章

网友评论

      本文标题:【多线程】多个请求完成以后再执行其他操作

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