文章标题
来源:互联网 发布:数据统治世界 百度云 编辑:程序博客网 时间:2024/05/20 12:48
GCD常见的一些基础用法(待更新)
总结一下,GCD的常见用法,主要包括以下几个类别:
1 单例
+ (instancetype)sharedClient { static Class *_sharedClient = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedClient = [[Class alloc] init]; }); return _sharedClient;}
很固定的一种模式,主要用于仅需要执行一次的地方。
2 延后执行
- (void)refresh{ double delayInSeconds = 2.0; dispatch_time_t timeDelay = dispatch_time(DISPATCH_TIME_NOW, (int64_t) (delayInSeconds * NSEC_PER_SEC)); dispatch_after(timeDelay, dispatch_get_main_queue(), ^(void){ [self refreshTable]; });}
顾名思义,当你需要让代码延迟多少秒后执行,可以用到这种方式。
3 同步线程执行和异步线程执行
同步线程:
void dispatch_sync( dispatch_queue_t queue, dispatch_block_t block);
异步线程:
void dispatch_async( dispatch_queue_t queue, dispatch_block_t block);
参数queue是你准备用到的线程,分为串行队列和并行队列;
串行队列:
最常用到的是dispatch_get_main_queue(),也就是系统默认主线程。也可以自己创建,用
dispatch_queue_t serialQueue = dispatch_queue_create(queueName,DISPATCH_QUEUE_SERIAL);
使用串行队列会顺序执行,也就是前面的执行完毕才会执行后面的,这个一在需要更新UI的时候用。
并行队列:
使用dispatch_get_global_queue获得系统的全局队列:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
也可以自己创建:
dispatch_queue_t queue = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);
4 dispatch_barrier_async 的使用
barrier,意思就是栅栏,设置一个栅栏,任务会等到前面的完成,并且自己执行完毕以后才会执行后面的任务。
用法和别的一样,如下
dispatch_barrier_async(queue, ^{ });
5 组的使用
有时候,当你需要把一些异步的 block 组合起来去完成一个任务的时候,可以用”groups” 去完成这项任务。
func groupGCD(){ let group = dispatch_group_create() let queue = dispatch_get_global_queue(0, 0) dispatch_group_async(group, queue) { self.content = "a" } dispatch_group_async(group, queue) { self.content = "b" } dispatch_group_notify(group, queue) { print("\(self.content)") }; }
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- HDU 5783 Divide the Sequence(贪心)
- 读《About Face 4 交互设计精髓》13
- 整数型int 为什么不可以用 memset 函数?
- 解决ViewPager高度无法wrap_content问题
- 我的jquery之路(二)
- 文章标题
- sed工具以及awk工具的介绍及使用
- iOS开发 非常全的三方库、插件、大牛博客等等
- netbeans c++环境配置
- 基础图论知识总结
- jdbc查询大量数据内存溢出的解决方法
- 初次写博客,留作纪念
- 如何删除表中重复的wid
- js 判断数组中元素是否重复