遇到一个需求,,,某一个操作需要请求接口获得数据再继续往下操作。但 请求接口封装在了一个工具类中,,以block 方式回调,,因为是异步会先执行主线程,以至于达不到我们想要的效果。。。
so、
就用到GCD Group 方式或者信号量方式来完成。
直接上代码,,,
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
[[YWAddressDataTool sharedManager] loadRegionListid:cityItem.id with:^(NSArray *list) {
NSLog(@"begin");
self.districtDataSouce = list;
dispatch_group_leave(group);
}];
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"end");
if ([indexPath0 compare:indexPath] != NSOrderedSame && indexPath0) {
for (int i = 0; i < self.tableViews.count - 1; i++) {
[self removeLastItem];
}
[self addTopBarItem];
[self addTableView];
[self scrollToNextItem:cityItem.name];
if (_seleteCodeArr.count == 2) {
[_seleteCodeArr removeObjectAtIndex:1];
[_seleteCodeArr addObject:cityItem.id];
}
} else if ([indexPath0 compare:indexPath] == NSOrderedSame && indexPath0) {
[self scrollToNextItem:cityItem.name];
}else
{
[self addTopBarItem];
[self addTableView];
YWAddressModel * item = self.cityDataSouce[indexPath.row];
[self scrollToNextItem:item.name];
[_seleteCodeArr addObject:cityItem.id];
}
});
会先打印begin,,,可以进行相关赋值等。。再打印end,继续往下操作~
over~
网友评论