#define global_queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define main_queue dispatch_get_main_queue() #import "HMViewController.h" @interface HMViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView1;
@property (weak, nonatomic) IBOutlet UIImageView *imageView2;
@property (weak, nonatomic) IBOutlet UIImageView *bigImageView;
@end @implementation HMViewController - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 图片1: http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg
// 图片2: http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg
/**
1.下载图片1和图片2 2.将图片1和图片2合并成一张图片后显示到imageView上 思考:
* 下载图片 : 子线程
* 等2张图片都下载完毕后, 才回到主线程
*/
} - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 创建一个组
dispatch_group_t group = dispatch_group_create(); // 开启一个任务下载图片1
__block UIImage *image1 = nil;
dispatch_group_async(group, global_queue, ^{
image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
}); // 开启一个任务下载图片2
__block UIImage *image2 = nil;
dispatch_group_async(group, global_queue, ^{
image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"];
}); // 同时执行下载图片1\下载图片2操作 // 等group中的所有任务都执行完毕, 再回到主线程执行其他操作
dispatch_group_notify(group, main_queue, ^{
self.imageView1.image = image1;
self.imageView2.image = image2; // 合并
UIGraphicsBeginImageContextWithOptions(CGSizeMake(, ), NO, 0.0);
[image1 drawInRect:CGRectMake(, , , )];
[image2 drawInRect:CGRectMake(, , , )];
self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
});
// if (self.log == NO) {
// NSLog(@"-------touchesBegan");
// self.log = YES;
// }
// static dispatch_once_t onceToken;
// dispatch_once(&onceToken, ^{
// NSLog(@"-------touchesBegan");
// });
} - (void)downlaod2image
{
dispatch_async(global_queue, ^{
NSLog(@"下载图片---%@", [NSThread currentThread]); // 下载图片1
UIImage *image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
NSLog(@"下载完图片1---%@", [NSThread currentThread]);
// 下载图片2
UIImage *image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
NSLog(@"下载完图片2---%@", [NSThread currentThread]); dispatch_async(main_queue, ^{
NSLog(@"显示图片---%@", [NSThread currentThread]); self.imageView1.image = image1;
self.imageView2.image = image2; // 合并
UIGraphicsBeginImageContextWithOptions(CGSizeMake(, ), NO, 0.0);
[image1 drawInRect:CGRectMake(, , , )];
[image2 drawInRect:CGRectMake(, , , )];
self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
});
});
} - (UIImage *)imageWithURL:(NSString *)urlStr
{
NSURL *url = [NSURL URLWithString:urlStr];
NSData *data = [NSData dataWithContentsOfURL:url]; // 这行会比较耗时
return [UIImage imageWithData:data];
} - (void)delay
{
// NSLog(@"----touchesBegan----%@", [NSThread currentThread]); // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// [self performSelector:@selector(run) withObject:nil afterDelay:2.0];
// });
// 1.全局并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); // 2.计算任务执行的时间
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)); // 3.会在when这个时间点, 执行queue中的任务
dispatch_after(when, queue, ^{
NSLog(@"----run----%@", [NSThread currentThread]);
});
}
//- (void)run
//{
// NSLog(@"----run----%@", [NSThread currentThread]);
//} @end

最新文章

  1. iOS运用fabric记录crash日志过程
  2. phpstorm
  3. 游戏引擎/GUI的设计与实现-常见GUI架构
  4. LVM---动态调整磁盘容量
  5. 如何使Android Studio项目发布到Jcenter中
  6. (转)互联网协议入门 ------ HTTP(1)
  7. 事件分发&响应链
  8. C语言2048
  9. HBase面试问题
  10. RH133读书笔记(1)-Lab 1 Managing Startup
  11. ios 获取融云token
  12. maven pom 属性介绍
  13. Mysql取随机数据效率测试(200W条中读取100条)
  14. N - Asteroids
  15. 那些年,我们追过的PHP自加自减运算(2)
  16. kafka学习总结之kafka简介
  17. android:activity活动的生命周期
  18. JavaScript正则式练习
  19. Excel 中如何快速统计一列中相同字符的个数(函数法)
  20. 再谈zabbix 邮件通知配置(不用脚本,简单配置就可以了)

热门文章

  1. js最后深入总结
  2. jenkins出现的问题
  3. mc03_IntelliJ IDEA配置github
  4. 安装eclipse for ee
  5. 苏D_8M150
  6. 使用vue-router beforEach实现判断用户登录跳转路由筛选功能
  7. vue--钩子函数1
  8. CAD安装失败怎样卸载CAD 2018?错误提示某些产品无法安装
  9. 源码剖析Linux epoll实现机制及Linux上惊群
  10. 自定义HandlerMethodArgumentResolver参数解析器和源码分析