1)问题描述
有些时候,在项目中会出现如下场景,
常见的就是网络异步请求相关。
例如:A、B、C三个请求,
ABC都完成,并且成功再执行下一个动作。
2)解决方案
利用GCD中的dispatch_group_create函数解决问题
{
//①创建一个group
dispatch_group_t group = dispatch_group_create();
//②等待网络请求A返回数据
dispatch_group_enter(group);
{
//Method,A经过一系列的方法下载完成
[self download];
dispatch_group_leave(group);
}
//③等待网络请求B返回数据
dispatch_group_enter(group);
{
//Method,B经过一系列的方法下载完成
[self download];
dispatch_group_leave(group);
}
//④等待网络请求C返回数据
dispatch_group_enter(group);
{
//Method,C经过一系列的方法下载完成
[self download];
dispatch_group_leave(group);
}
//⑤A、B、C全部完成,通知group可以执行下一步操作;
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
//执行下一步操作 to do
}
//dispatch_group_enter(group);
//dispatch_group_leave(group);
//注:这两个函数是成对出现的,
1)enter函数大于leave,说明某个下载未完成,不能执行dispatch_group_notify函数;
2)leave函数大于enter,程序会崩溃。
3)故,使用的时候要细心,多加小心!
}
网友评论