1、调度组(分组) 均完成后再通知
/**
应用场景:
开发的时候,有的时候出现多个网络请求都完成以后(每一个网络请求的事件长短不一定),再统一通知用户
*/
// 实例化一个调度组
dispatch_group_t group = dispatch_group_create();
// 队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
// 任务添加到队列queue
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(@"下载完成,请观看%@", [NSThread currentThread]); // 异步的
// });
//注意点: 在调度组完成通知里,可以跨队列通信
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 更新UI,在主线程
NSLog(@"全部完成 %@", [NSThread currentThread]); // 异步的
});
2、延迟操作
/**
参数:
now 0
NSEC_PER_SEC: 很大的数字
*/
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
// 参数: when : 表示从现在开始,经过多少纳秒以后
// queue : 在哪一个队列里面执行后面的任务
// dispatch_after(when, dispatch_get_main_queue(), ^{
// });
//
dispatch_after(when, dispatch_get_global_queue(0, 0), ^{
//延迟后进行操作
});