GCD多线程2
来源:互联网 发布:moe域名注册 编辑:程序博客网 时间:2024/06/04 18:50
一、主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行。
如果把任务放到主队列中进行处理,那么不论处理函数是异步的还是同步的都不会开启新的线程。
(1)使用异步函数执行主队列中的任务
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSLog(@"%@",[NSThread mainThread]); dispatch_queue_t mainQueue = dispatch_get_main_queue(); dispatch_async(mainQueue, ^{ NSLog(@"使用异步函数执行主队列中的任务1--%@",[NSThread currentThread]); });dispatch_async(mainQueue, ^{ NSLog(@"使用异步函数执行主队列中的任务2--%@",[NSThread currentThread]);}); dispatch_async(mainQueue, ^{ NSLog(@"使用异步函数执行主队列中的任务3--%@",[NSThread currentThread]); });}
打印结果:
(2)使用同步函数,在主线程中执行主队列中的任务,会发生死循环
二、
1、任务1单独开启一个新的线程,任务2在主线程执行。
- (void)viewDidLoad { [super viewDidLoad]; //开启一个后台线程,调用执行test方法 [self performSelectorInBackground:@selector(test) withObject:nil]; } -(void)test { NSLog(@"当前线程---%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //异步函数 dispatch_async(queue, ^{ NSLog(@"任务1所在的线程----%@",[NSThread currentThread]); }); //同步函数 dispatch_sync(queue, ^{ NSLog(@"任务2所在的线程----%@",[NSThread currentThread]); }); }
打印结果:
2.在子线程加载图片完毕后,主线程拿到加载的image刷新UI界面
- (void)viewDidLoad { [super viewDidLoad]; }-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //1.获取一个全局串行队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.把任务添加到队列中执行 dispatch_async(queue, ^{ //打印当前线程 NSLog(@"%@",[NSThread currentThread]); //3.从网络上下载图片 NSURL *urlstr=[NSURL URLWithString:@"http://upload.ct.youth.cn/2015/0608/1433725303485.jpg"]; NSData *data=[NSData dataWithContentsOfURL:urlstr]; UIImage *image=[UIImage imageWithData:data]; //提示 NSLog(@"图片加载完毕"); dispatch_async(dispatch_get_main_queue(), ^{ self.imageView.image = image; //打印当前线程 NSLog(@"%@",[NSThread currentThread]); }); }); }
0 0
- GCD多线程2
- 多线程开发2 -GCD
- 多线程之GCD(2)
- 多线程学习笔记2-GCD
- GCD多线程
- 多线程GCD
- GCD多线程
- 多线程-GCD
- 多线程 gcd
- 多线程GCD
- 多线程&GCD
- GCD多线程
- 多线程GCD
- 多线程:GCD
- 多线程-GCD
- 多线程GCD
- 多线程-GCD
- GCD(多线程)
- .NET 设计模式大全
- JavaScript (二)
- 如此理解面向对象编程
- YII的异常处理
- spark启动时 问题
- GCD多线程2
- 本科数学建模时候的一些零碎总结(未整理)
- Java高级个人笔记(StringUtils工具类用法)
- 读取Excel数据和写入txt文件以及读取配置文件工具类
- ios第一天
- 开端
- 解决img图片元素下多余空白
- 记录下mac查看java 安装路径的问题
- iOS中线程以及GET和POST请求的一些知识