GCD的常见用法
Posted loveDoDream_zzt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCD的常见用法相关的知识,希望对你有一定的参考价值。
一.队列组
1.分别异步执行2个耗时的操作, 等2个异步操作都执行完毕后,再回到主线程执行另一个操作, 用队列组比较好
1 dispatch_group_t group = dispatch_group_create(); 2 3 dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 4 5 // 耗时的异步操作一 6 7 }); 8 9 dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 10 11 // 耗时的异步操作二 12 13 }); 14 15 dispatch_group_notify(group, dispatch_get_main_queue(), ^{ 16 17 // 操作一二都完毕后,回到主线程 18 19 });
二、延迟执行
1.第一种
1 // 3秒后再调用self的test方法 2 3 [self performSelector:@selector(test) withObject:nil afterDelay:3.0];
该方法通常是在主线程中调用,会阻碍进程, 产生卡顿。
2. 第二种---GCD
1 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), my_queue, ^{ 2 3 // 3秒后异步执行这里的代码... 4 5 });
其中my_queue可以是主队列也可以是全局并发队列, 自己可以选
1 //获取主队列 2 3 dispatch_queue_t my_queue= dispatch_get_main_queue();
1 //获取全局并发队列 2 3 dispatch_queue_t my_queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
三.使用dispatch_once一次性代码
使用dispatch_once函数能保证某段代码在程序运行过程中只被执行1次
1 static dispatch_once_t onceToken; 2 3 dispatch_once(&onceToken, ^{ 4 5 // 只执行1次的代码 6 });
以上是关于GCD的常见用法的主要内容,如果未能解决你的问题,请参考以下文章