GCD使用介绍:队列组dispatch group

在使用GCD进行任务操作时,有时会希望若干个任务执行之间有先后执行的依赖关系,
例如,当A、B两个异步任务完成后,再去完成C任务,
这时就可以使用队列组dispatch group来完成。
- (IBAction)startTask:(id)sender {  
    NSLog(@"0--%@", [NSThread currentThread]);
    //创建队列组
    dispatch_group_t group = dispatch_group_create(); 
    //创建并行队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);    
    //创建队列组中的第一个异步任务
    dispatch_group_async(group, queue, ^{
        NSLog(@"1.1--%@", [NSThread currentThread]);
        //下载网络图片
        NSString *urlStr = @"http://7xta2c.com1.z0.glb.clouddn.com/99logo.png";
        NSURL *url = [NSURL URLWithString:urlStr];
        NSData *imageData = [NSData dataWithContentsOfURL:url];
        UIImage *image = [UIImage imageWithData:imageData];       
        //返回主队列设置图片
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"1.2--%@", [NSThread currentThread]);
            self.task1ImageView.image = image;
        });
    });   
    //创建队列组中的第二个异步任务
    dispatch_group_async(group, queue, ^{
       NSLog(@"2.1--%@", [NSThread currentThread]);
        //下载网络图片
        NSString *urlStr = @"http://7xta2c.com1.z0.glb.clouddn.com/99logo.png";
        NSURL *url = [NSURL URLWithString:urlStr];
        NSData *imageData = [NSData dataWithContentsOfURL:url];
        UIImage *image = [UIImage imageWithData:imageData];        
        //返回主队列设置图片
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"2.2--%@", [NSThread currentThread]);
            self.task2ImageView.image = image;
        });       
    });    
    //任务组中的任务完成后,执行的动作
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"3--%@", [NSThread currentThread]);
       self.taskLabel.text = @"下载完成";
    });  
}

你可能感兴趣的:(GCD使用介绍:队列组dispatch group)