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

有时会出现这样一种情况,比如某个页面需请求多个接口获取数据后刷新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];  
    });  
} 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容