1. OC的方法
- (void)group1{
//创建调度组
dispatch_group_t group = dispatch_group_create();
// 队列执行
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
//调度组的监听调度任务
dispatch_group_async(group, q, ^{
NSLog(@"downLoad 1 -%@",[NSThread currentThread]);
});
dispatch_group_async(group, q, ^{
NSLog(@"downLoad 2 -%@",[NSThread currentThread]);
});
dispatch_group_async(group, q, ^{
NSLog(@"downLoad 3 -%@",[NSThread currentThread]);
});
//任务全部完成监听回调
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"come here -%@",[NSThread currentThread]);
});
}
/*
//终端: man dispatch_group_enter
void
dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block)
{
//入组 --监听随后的Block
dispatch_retain(group);
dispatch_group_enter(group);
//异步执行 queue 调度 block
dispatch_async(queue, ^{
block();
//出组
dispatch_group_leave(group);
dispatch_release(group);
});
}
**/
- (void)group2{
//创建调度组
dispatch_group_t group = dispatch_group_create();
// 队列执行
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
//入组
dispatch_group_enter(group);
dispatch_async(q, ^{
NSLog(@"downLoad 1 -%@",[NSThread currentThread]);
//出组
dispatch_group_leave(group);
});
//入组
dispatch_group_enter(group);
dispatch_async(q, ^{
[NSThread sleepForTimeInterval:2.0];
NSLog(@"downLoad 2 -%@",[NSThread currentThread]);
//出组
dispatch_group_leave(group);
});
//入组
dispatch_group_enter(group);
dispatch_async(q, ^{
NSLog(@"downLoad 3 -%@",[NSThread currentThread]);
//出组
dispatch_group_leave(group);
});
//任务全部完成监听回调
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"come here -%@",[NSThread currentThread]);
});
}
2. SWIFT的方法 -- 进组和出组的数目要一样
// 调度组
let group = DispatchGroup()
// A> 入组
group.enter()
// B> 出组
group.leave()
// C> 监听调度组情况
group.notify(queue: DispatchQueue.main) {
print("调度组完成 ")
}