在上一篇介绍了GCD的主要使用方法,但是还有个别功能没有说到,其它有些还是挺常用的,下面就再补充下(啰嗦几句):
1,延时执行:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 2秒后执行这里的代码...,延时函数,是异步执行的,大家可以测试一下。比如用下面的代码也可以得到结果:
NSLog(@"hello");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"%@",[NSThread currentThread]);
});
NSLog(@"xiaoyuancai");
});
2,一次执行:
dispatch_once(&onceToken, ^{
//只执行1次的代码(这里面默认是线程安全的,不信大家可以测试一下,用异步+并发队列去测试)
});
3,快速迭代(不常用):
dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t
index){
//执行10次代码,index顺序不确定
});
4,队列组:
使用场景:
首先:分别异步执行2个耗时的操作
其次:等2个异步操作都执行完毕后,再回到主线程执行操作,如果想要快速高效地实现上述需求,可以考虑用队列组。
dispatch_group_tgroup = dispatch_group_create();
dispatch_group_async(group,
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//执行1个耗时的异步操作
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//执行1个耗时的异步操作
});
dispatch_group_notify(group,dispatch_get_main_queue(),^{
//等前面的异步操作都执行完毕后,回到主线程...
});
网友评论