一.dispatch_barrier_async 栅栏块
在一个自定义的并行队列中执行多个任务block时,如果接下来要处理的是barrier block, barrier block并不会立即执行,而是要一直等待barrier block 前面的所有其他并发block执行完毕才会执行barrier block,任何提交到barrier block之后的在此队列中执行的block只有等到barrier block执行完毕,才会接着向下执行
注意:这个队列要是用户通过dispatch_queue_create创建的自定义队列,而且还要是并行队列,
对于串行队列和全局队列不起作用,会按照普通的block执行
1.在全局队列中异步执行,会按照dispatch_async方式执行
2.自定义并行队列中执行
二.dispatch_group_async 分派组
将并行队列中异步的多个任务合并为一组,等到这组任务完成后,通过利用dispatch_group_notify回调得到这组任务完成的通知
例如:当异步下载多张图片的时候,需要等到所有图片下载完成之后,去通知用户下载完成,就可以这么来干
可以利用 dispatch_group_enter(dispathch_group_t group) dispatch_group_leave(dispathch_group_t group),来加入到指定的group中,这两个方法必须是成对出现的,否则会出现内存泄露
有两个方法可以用来得到回到的通知
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
这个方法会阻塞线层,只有当前group上所有的任务完成才会继续往下执行
dispatch_group_notify
这个方法不会阻塞线层,这行代码之下所加到这个group的任务也包含在内