每当在同一时间网络请求的时候, 务必要监听到所有的网络请求结束的时间.
请看如下例子:
// 模拟同时请求多个网络请求, 并监听所有网络请求都结束.
- (void)dispatch_group_Test {
// 创建一个组
dispatch_group_t group = dispatch_group_create();
// 网络请求 1
{
// 进入组
dispatch_group_enter(group);
// 假装这里有一个网络请求
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// TODO : 假装这里有一个不定时的网络请求
[NSThread sleepForTimeInterval:2];
NSLog(@"网络请求 1 结束 %@", [NSThread currentThread]);
// 任务结束, 退出组
dispatch_group_leave(group);
});
}
// 网络请求 2
{
// 进入组
dispatch_group_enter(group);
// 假装这里有一个网络请求
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// TODO : 假装这里有一个不定时的网络请求
[NSThread sleepForTimeInterval:3];
NSLog(@"网络请求 2 结束 %@", [NSThread currentThread]);
// 任务结束, 退出组
dispatch_group_leave(group);
});
}
// 网络请求 3
{
// 进入组
dispatch_group_enter(group);
// 假装这里有一个网络请求
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// TODO : 假装这里有一个不定时的网络请求
[NSThread sleepForTimeInterval:1];
NSLog(@"网络请求 3 结束 %@", [NSThread currentThread]);
// 任务结束, 退出组
dispatch_group_leave(group);
});
}
// 所有子线程任务全部完成, 并回到主线程
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"所有请求结束 %@", [NSThread currentThread]);
});
}
还有另一种方式:
let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let group = dispatch_group_create()
dispatch_group_async(group, globalQueue) { () -> Void in
println("1")
}
dispatch_group_async(group, globalQueue) { () -> Void in
println("2")
}
dispatch_group_async(group, globalQueue) { () -> Void in
println("3")
}
dispatch_group_notify(group, globalQueue) { () -> Void in
println("completed")
}
来自于 : iOS GCD使用指南