博客> 无标题文章
无标题文章
2017-11-23 13:34 评论:0 阅读:247 文馨2526
ios GCD

iOS提供三种线程管理方式:NSThread、GCD和NSOperation 本文章是仅对GCD的简单使用做介绍 CGD是用C语言实现的 GCD(Grand Central Dispatch)有三类调度队列 1、主队列 dispatch_get_main_queue()获取主调度队列,UI刷新一定要在主调度队列中执行。(本质上主线程也是个串行队列) 2、并行队列(Concurrent Dispatch Queues) 并行队列中的每个操作是并发执行的,并不会按照顺序依次执行 系统提供三个并发线程,三个并发线程的优先级不同 dispatch_get_global_queue(long identifier, unsigned long flags):获取指定优先级的系统并行队列,其中identifier参数可设置为DISPATCH_QUEUE_PRIORITY_HIGH、DISPATCH_QUEUE_PRIORITY_DEFAULT、DISPATCH_QUEUE_PRIORITY_LOW和DISPATCH_QUEUE_PRIORITY_BACKGROUND,优先级依次降低。flags保留参数,传0即可。

dispatch_queue_t queue = dispatch_queue_create(@"com.concurrent.dispatch", DISPATCH_QUEUE_CONCURRENT) 创建自己的并行队列

3、串行队列(Serial Dispatch Queues) 串行队列中的每个操作是按照先后顺序依次执行的 系统没有提供全局可用的串行队列 dispatch_queue_t queue = dispatch_queue_create(@"com.serial.dispatch", DISPATCH_QUEUE_SERIAL) 创建串行队列

dispatch_async(dispatch_queue_t _Nonnull queue, ^(void)block):使用调度队列执行异步操作,要进行的操作放在block参数中

以下是使用GCD实现图片下载的例子 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSURL url = [NSURL URLWithString:@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"]; NSData data = [[NSData alloc] initWithContentsOfURL:url]; UIImage *image = [[UIImage alloc] initWithData:data]; dispatch_async(dispatch_get_main_queue(), ^{ imageView.image = image; }); });

收藏
0
sina weixin mail 回到顶部