1.用途:
能够把任务分组,调用者可以等待这组任务执行完毕,也可以在提供回调函数后继续往下执行,这组任务完成后,调用者会得到通知。就是把将要并发执行的多个任务合为一组,于是调用者就可以知道这些任务何时才能执行完毕。
2.任务编组:
第一种函数:
void dispatch_group_async(dispatch_group_t group,
dispatch_queue_t queue,
dispatch_block_t block);
这是 dispatch_async的函数变体,比原来多一个参数,表示待执行块所归属的组。
第二种函数:
void dispatch_group_enter(dispatch_group_t group);
void dispatch_group_leave(dispatch_group_t group)
enter表示的是往group里面增加任务的,leave是表示移除group,这两个函数是成对出现的。如果enter之后,没有leave操作,那么这个任务就永远不会执行完。
3.等待任务执行完毕:
第一种函数:(会导致线程阻塞)
long dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout);
此函数的参数:dispatch_group_t 表示等待的group,
dispatch_time_t 表示等待的timeout时间,表示函数在等待group执行完毕,应该阻塞多久。如果执行group所需的时间小于timeout,则会返回0,否则返回非0值。此参数取常量 DISPATCH_TIME_FOREVER ,这表示函数会一直等待group执行完毕,而不会超时。
第二种函数:
void dispatch_group_notify(dispatch_group_t group,
dispatch_queue_t queue,
dispatch_block_t block);
在不阻塞当前线程,而开发者又想在任务完成后得到通知,执行完成的代码。 dispatch_block_t 参数里面填写group结束后,代码的回调。回调所选的队列,跟具体情况来选。