GCD 大中枢调度之group

2021-05-27  本文已影响0人  LV大树

最近吃了这个亏呀。
涉及到多个异步请求完成后,再刷新界面。
我想各位必有神通,我这里用的是GCD的派发组。
创建一个派发组,

dispatch_group_t group = dispatch_group_create();
再创建一个并发队列。
dispatch_queue_t queue = dispatch_queue_create("label", DISPATCH_QUEUE_CONCURRENT);

dispatch_group_async(group, queue, ^{
//必须先进入组
dispatch_group_enter(group);
//根据你的任务,这里加入一个异步操作,如网络请求。

完成后调用离开组
dispatch_group_leave(group);
});
dispatch_group_async(group, queue, ^{
//必须先进入组
dispatch_group_enter(group);
//根据你的任务,这里加入另一个异步操作,如网络请求。

完成后调用离开组
dispatch_group_leave(group);
});
dispatch_group_async(group, queue, ^{
//必须先进入组
dispatch_group_enter(group);
//根据你的任务,这里加入第N个异步操作,如网络请求。

完成后调用离开组
dispatch_group_leave(group);
});

//当所有组都退出时,会调用这里。然后在主线程刷新你的界面。
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];//刷新你的界面。
});
});

千万要小心操作,必须先进入组,最后离开组。

上一篇下一篇

猜你喜欢

热点阅读