队列组可以监视队列组里面队列里面的任务执行情况
写法一
//创建一个并发队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
//创建一个队列组
dispatch_group_t group = dispatch_group_create();
//我们将所有进行多线程的任务放在队列组异步函数中(和普通的异步函数多了一个group)
dispatch_group_async(group, queue, ^{
NSLog(@"1---%@" , [NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"2----%@" , [NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"3---%@" , [NSThread currentThread]);
});
//监听函数(在所有的异步函数完成之后再调用这个函数)
dispatch_group_notify(group, queue, ^{
NSLog(@"-------end---------");
});
- 队列组的异步函数会做的事情
1.封装任务
2.把人物添加到队列中
3.会监听任务的执行情况,通知group
写法二(函数对)
//创建一个并发队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
//创建一个队列组
dispatch_group_t group = dispatch_group_create();
//在该方法后面的异步任务会被纳入到队列组的监听范围,进入群组
//dispatch_group_enter|dispatch_group_leave 必须要配对使用
dispatch_group_enter(group)
dispatch_async(queue , ^{
NSLog(@"1----%@" , [NSThread currentTHread]);
//离开群组
dispatch_group_leave(group);
});
dispatch_async(queue , ^{
NSLog(@"2---%@" , [NSThread currentTHread]);
//离开群组
dispatch_group_leave(group);
});
//最后还是需要用notify方法进行拦截
dispatch_group_notify(group, queue, ^{
NSLog(@"-------end---------");
});
- dispatch_group_notify方法内部本身是异步的
相对于notify方法还有一个wait方法
dispatch_group_wait(group , DISPATCH_TIME_FOREVER);
NSLog(@"-----end----");
- 等待。死等。直到队列中所有的任务都执行完毕之后才能执行
- 本身是阻塞的
- 如果他不执行完,后面的代码也不会执行