创建线程方式-GCD
2015-12-27 17:07
246 查看
GCD
(1)GCD基本知识GCD:Grand central Dispatch 牛逼的中枢调度器 01 两个核心概念:队列和任务 使用步骤:1.定制任务,2.将任务添加到队列中(遵循先进先出的原则) 02 同步函数和异步函数
(2)GCD基本使用
01 异步函数+并发队列:开启多条线程,并发执行任务
02 异步函数+串行队列:开启一条线程,串行执行任务
03 同步函数+并发队列:不开线程,串行执行任务
04 同步函数+串行队列:不开线程,串行执行任务
05 异步函数+主队列:不开线程,在主线程中串行执行任务
06 同步函数+主队列:不开线程,串行执行任务(注意死锁发生)
主队列特点:如果发现主线程当前正在执行代码(任务),那么主队列将不会调度队列里的任务,直到主线程的任务执行完毕
07 注意同步函数和异步函数在执行顺序上面的差异
(3)GCD线程间通信
//0.获取一个全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); //1.先开启一个线程,把下载图片的操作放在子线程中处理 dispatch_async(queue, ^{ //2.下载图片 NSURL *url = [NSURL URLWithString:@"http://h.hiphotos.baidu.com/zhidao/pic/item/6a63f6246b600c3320b14bb3184c510fd8f9a185.jpg"]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *image = [UIImage imageWithData:data]; NSLog(@"下载操作所在的线程--%@",[NSThread currentThread]); //3.回到主线程刷新UI dispatch_async(dispatch_get_main_queue(), ^{ self.imageView.image = image; //打印查看当前线程 NSLog(@"刷新UI---%@",[NSThread currentThread]); }); });
(4)GCD其它常用函数
01 栅栏函数(控制任务的执行顺序) dispatch_barrier_async(queue, ^{ NSLog(@"--dispatch_barrier_async-"); });
02 延迟执行(延迟·控制在哪个线程执行)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"---%@",[NSThread currentThread]);
});
03 一次性代码(注意不能放到懒加载)
-(void)once
{
//整个程序运行过程中只会执行一次
//onceToken用来记录:该部分的代码是否被执行过.若执行过,则不会进行操作.
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"-----");
});
}
04 快速迭代(开多个线程并发完成迭代操作)
dispatch_apply(subpaths.count, queue, ^(size_t index) {
});
05 队列组(同栅栏函数)
//创建队列组
dispatch_group_t group = dispatch_group_create();
//队列组中的任务执行完毕之后,执行该函数
dispatch_group_notify(dispatch_group_t group,
dispatch_queue_t queue,
dispatch_block_t block);
相关文章推荐
- EL表达式 (详解)
- 装饰者模式(heade first设计模式读书笔记)
- 28.iPhone陀螺仪传感器的介绍
- 《大话移动 APP 测试》
- 【python学习笔记】用正则表达式从含中文的网页中提取数据(含编码转换)
- 芒果iOS开发之Merge branch 'master' of XXX Please enter a commit message to explain why this merge
- 单一职责原则
- 装饰模式
- Android开发和測试实践 - 接入友盟统计
- 大数据日知录笔记1--大数据存储
- android之旅12 activity之间的跳转与生命周期
- 27.iPhone加速度传感器简单介绍
- CentOS7 引导win7
- ScrollView和ListView冲突解决
- Redis整合Spring结合使用缓存实例
- RabbitMQ搭建
- Linux常用命令 - ifconfig
- Android M 新的运行时权限开发者需要知道的一切
- zabbix之rpm快速部署
- android偏好设置