GCD的线程组

效果图 Gif.gif

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *leftImageView;
@property (weak, nonatomic) IBOutlet UIImageView *rightImageView;

@end

@implementation ViewController

#pragma mark - 生命周期
- (void)viewDidLoad {
    [super viewDidLoad];
    
}


#pragma mark - 下载图片
- (IBAction)downloadImage:(id)sender {
    
    self.leftImageView.image = nil;
    self.rightImageView.image = nil;
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSURL *url = [NSURL URLWithString:@"https://pixabay.com/static/uploads/photo/2014/09/23/21/23/iphone-6-458159_960_720.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *image = [UIImage imageWithData:data];
        dispatch_async(dispatch_get_main_queue(), ^{
            self.leftImageView.image = image;
        });
    });
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSURL *url = [NSURL URLWithString:@"https://pixabay.com/static/uploads/photo/2014/09/23/21/23/iphone-6-458159_960_720.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *image = [UIImage imageWithData:data];
        dispatch_async(dispatch_get_main_queue(), ^{
            self.rightImageView.image = image;
        });
    });
    
}


#pragma mark - 成组下载图片
- (IBAction)groupDownloadImage:(id)sender {
    
    self.leftImageView.image = nil;
    self.rightImageView.image = nil;
    
//    __block UIImage *rightImage = nil;
//    __block UIImage *leftImage = nil;

    __block UIImage *leftImage , *rightImage = nil;

    
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        NSURL *url = [NSURL URLWithString:@"https://pixabay.com/static/uploads/photo/2014/09/23/21/23/iphone-6-458159_960_720.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        leftImage = [UIImage imageWithData:data];
        //具体的赋值操作要放到后面去做;
        
    });
    
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        NSURL *url = [NSURL URLWithString:@"https://pixabay.com/static/uploads/photo/2014/09/23/21/23/iphone-6-458159_960_720.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        rightImage = [UIImage imageWithData:data];
        //具体的赋值操作要放到后面去做;
    });
    
    //拿到线程组里下载好的图片 , 然后回到主线程完成赋值操作:
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        //在这边永远等待 , 指导图片下载完毕我再去做其他的事情:
        dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
        
        dispatch_async(dispatch_get_main_queue(), ^{
            self.leftImageView.image = leftImage;
            self.rightImageView.image = rightImage;
        });
        
    });
    
}


#pragma mark - 内存警告
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}



@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容