多线程的简单应用

全局并发队列//添加touch事件显示图片 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //1获得主队列 线程之间的通讯 //异步并行 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //执行操作 NSString *str=@"http://a.hiphotos.baidu.com/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=1dc843d302087bf469e15fbb93ba3c49/6a63f6246b600c338719a2501a4c510fd8f9a1c1.jpg"; NSURL *url=[NSURL URLWithString:str]; NSData *data=[NSData dataWithContentsOfURL:url]; UIImage *image=[UIImage imageWithData:data]; //回到主线程显示图片 dispatch_async(dispatch_get_main_queue(), ^{ self.imageview.image=image; }); }); } //------------------- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //执行耗时的异步操作 dispatch_async(dispatch_get_main_queue(), ^{ //回到主线程,执行ui刷新操作 }); }); 全局并发队列 手动创建串行队列 主队列 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) dispatch_queue_create("queue名字", nil) dispatch_get_main_queue() 同步sync 没有开启新线程(不具备开启新线程的能力) 串行执行任务 没有开启新线程 串行执行任务 没有开启新线程 串行执行任务(死循环) 异步async 有开启新线程(具备开启新线程的能力) 并发执行任务 有开启新线程 串行执行 任务 有开启新线程 串行执行任务 //点击事件下载图片 两张图片合成一张图片显示 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ dispatch_group_t group=dispatch_group_create(); __block UIImage *image1=nil; dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ image1=[self imageWithurl:@"http://news.xinhuanet.com/mil/2015-08/21/128150615_14401105350931n.jpg"]; }); __block UIImage *image2=nil; dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ image2= [self imageWithurl:@"http://news.xinhuanet.com/mil/2015-08/21/128150615_14401105352811n.jpg"]; }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ self.image1.image=image1; self.image2.image=image2; //合并图片 UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 120), NO, 0.0); [image1 drawInRect:CGRectMake(0, 0, 100, 120)]; [image2 drawInRect:CGRectMake(100, 0, 100, 120)]; self.addimage.image=UIGraphicsGetImageFromCurrentImageContext(); //关闭上下文 UIGraphicsEndImageContext(); }); } //请求一个图片 -(UIImage *)imageWithurl:(NSString *)urlstr{ //1 NSURL *url=[NSURL URLWithString:urlstr]; NSData *data=[NSData dataWithContentsOfURL:url]; UIImage *image=[UIImage imageWithData:data]; NSLog(@"转图片"); return image; }
原文地址:https://www.cnblogs.com/shao621/p/4748120.html