#import "ViewController.h"
@interface ViewController ()
/** 图片1*/
@property(nonatomic ,strong) UIImage *image1;
/** 图片2*/
@property(nonatomic ,strong) UIImage *image2;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self test];
}
-(void)group
{
//1.创建队列组
dispatch_group_t group = dispatch_group_create();
//2.创建并发队列
dispatch_queue_t queue = dispatch_queue_create("downlaod", DISPATCH_QUEUE_CONCURRENT);
//3.下载图片1
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL URLWithString:@"http://img5.hao123.com/data/1_02d75d1d077f83a767fb530ac4a0b80d_510"];
NSData *data = [NSData dataWithContentsOfURL:url];
self.image1 = [UIImage imageWithData:data];
NSLog(@"1-----%@",[NSThread currentThread]);
});
//4.下载图片2
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL URLWithString:@"http://img1.gamedog.cn/2013/11/12/95-1311120Z3400.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
self.image2 = [UIImage imageWithData:data];
NSLog(@"2-----%@",[NSThread currentThread]);
});
//5.合成图片
dispatch_group_notify(group, queue, ^{
NSLog(@"3-----%@",[NSThread currentThread]);
//4.1 开启图形上下文
UIGraphicsBeginImageContext(CGSizeMake(200, 200));
//4.2 画图1
[self.image1 drawInRect:CGRectMake(0, 0, 200, 100)];
//4.3 画图2
[self.image2 drawInRect:CGRectMake(0, 100, 200, 100)];
//4.4 拿到图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
//4.5 关闭上下文
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
NSLog(@"UI-----%@",[NSThread currentThread]);
});
});
}
-(void)barrier
{
//需求:下载两张图片,合并图片并且显示出来
//1.创建并发队列
dispatch_queue_t queue = dispatch_queue_create("downlaod", DISPATCH_QUEUE_CONCURRENT);
//2.下载图片1
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"http://img5.hao123.com/data/1_02d75d1d077f83a767fb530ac4a0b80d_510"];
NSData *data = [NSData dataWithContentsOfURL:url];
self.image1 = [UIImage imageWithData:data];
NSLog(@"1-----%@",[NSThread currentThread]);
});
//3.下载图片2
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"http://img1.gamedog.cn/2013/11/12/95-1311120Z3400.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
self.image2 = [UIImage imageWithData:data];
NSLog(@"2-----%@",[NSThread currentThread]);
});
dispatch_barrier_async(queue, ^{
NSLog(@"++++++++");
});
//4.合成图片
dispatch_async(queue, ^{
NSLog(@"3-----%@",[NSThread currentThread]);
//4.1 开启图形上下文
UIGraphicsBeginImageContext(CGSizeMake(200, 200));
//4.2 画图1
[self.image1 drawInRect:CGRectMake(0, 0, 200, 100)];
//4.3 画图2
[self.image2 drawInRect:CGRectMake(0, 100, 200, 100)];
//4.4 拿到图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
//4.5 关闭上下文
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
NSLog(@"UI-----%@",[NSThread currentThread]);
});
});
// dispatch_release(queue);
}
-(void)test
{
//队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
/*
第一个参数:队列
第二个参数:函数的参数
第三个参数:函数
*/
NSString *param = @"abc";
dispatch_async_f(queue, (__bridge void *)(param), run);
}
void run(void *param)
{
NSLog(@"-----run----%@---%@",[NSThread currentThread],param);
}
@end