有时会出现这样一种情况,比如某个页面需请求多个接口获取数据后刷新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];
});
}