/**
* 做延时操作的事情
*/
[self delay];
/**
* 做一次性代码,touchesBegan方法
*/
/**
* 队列组使用需求:
* 首先:分别异步执行2个耗时的操作
* 其次:等两个异步操作都执行完毕后,在回到主线程执行操作
*/
[self downLoadImage];
// 图片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张图片都下载完毕后, 才回到主线程
*/
#pragma mark - 延时操作
- (void)delay {
//1.延时执行(iOS中有两种)
//1:调用NSObject的方法;2秒后在当前线程调用self的run方法
[self performSelector:@selector(run) withObject:nil afterDelay:2.0];
//2.利用GCD延时执行,这个是在主线程中, 也可以使用并发队列使在子线程中做
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC));//时间的计算函数
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"GCD---%@", [NSThread currentThread]);
});
}
- (void)run {
NSLog(@"run---%@", [NSThread currentThread]);
}
#pragma mark - 一次性代码
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//这种也会有问题, 需要弄一个全局变量
// if (self.log == NO) {
// NSLog(@"第一次---touchesBegan");
// self.log = YES;
// }
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"第一次---touchesBegan");
});
}
#pragma mark - 队列组
- (void)downLoadImage {
//第一种, 将任务写到一个队列执行, 时间长,效率低
/*
dispatch_async(global_queue, ^{
//下载图片1
UIImage *image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
//下载图片2
UIImage *image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"];
dispatch_async(main_queue, ^{
self.imageView1.image =image1;
self.imageView2.image =image2;
//合并
UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0.0);
[image1 drawInRect:CGRectMake(0, 0, 100, 100)];
[image2 drawInRect:CGRectMake(100, 0, 100, 100)];
self.BigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
});
});
*/
//第二种
//1.创建一个组
dispatch_group_t group = dispatch_group_create();
//2.开启任务1下载图片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.开启任务2下载图片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"];
});
//等group中的所有任务都执行完毕,在执行其他操作
dispatch_group_notify(group, main_queue, ^{
self.imageView1.image = image1;
self.imageView2.image = image2;
//合并
UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0.0);
[image1 drawInRect:CGRectMake(0, 0, 100, 100)];
[image2 drawInRect:CGRectMake(100, 0, 100, 100)];
self.BigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
});
}
- (UIImage *)imageWithURL:(NSString *)urlString {
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
return [UIImage imageWithData:data];
}