iOS多线程开发小demo7 GCD队列组
// DYFViewController.m // 623-08-队列组 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImageView *iconV1; @property (weak, nonatomic) IBOutlet UIImageView *iconV2; @property (weak, nonatomic) IBOutlet UIImageView *bigIconV; @end @implementation DYFViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"%@", [NSThread currentThread]); dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); __block UIImage *icon1 = nil; dispatch_group_async(group, queue, ^{ NSLog(@"%@", [NSThread currentThread]); // icon1 = [self imageWithURL:@"http://image.cache.xiu8.com/live/125/125/997729.jpg"]; }); __block UIImage *icon2 = nil; dispatch_group_async(group, queue, ^{ NSLog(@"%@", [NSThread currentThread]); // icon2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"]; }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ NSLog(@"%@", [NSThread currentThread]); // self.iconV1.image = icon1; self.iconV2.image = icon2; UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0); [icon1 drawInRect:CGRectMake(0, 0, 100, 100)]; [icon2 drawInRect:CGRectMake(100, 0, 100, 100)]; self.bigIconV.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); }); } - (UIImage *)imageWithURL:(NSString *)iconPath { NSLog(@"%@", [NSThread currentThread]); NSURL *url = [NSURL URLWithString:iconPath]; NSData *data = [NSData dataWithContentsOfURL:url]; return [UIImage imageWithData:data]; } @end
小结:
------------队列组------
1.有这么一种需求
·首先:分别异步执行2个耗时的操作
·其次:等2各异步操作都执行完毕后,再回到主线程执行操作
2.若想要快速高效的实现上述需求,可以考虑用队列组