Dispatch Group机制

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结束后,代码的回调。回调所选的队列,跟具体情况来选。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容