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.若想要快速高效的实现上述需求,可以考虑用队列组
浙公网安备 33010602011771号