GCD队列组

原创 2016年06月01日 14:03:51

@interface ViewController ()

@property (nonatomic,strong)UIImage *image1;

@property (nonatomic,strong)UIImage *image2;

@end



- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

/*

    //1.下载图片1

    dispatch_async(queue, ^{


        NSURL *url = [NSURL URLWithString:@"图片"];

        NSData *data = [NSData dataWithContentsOfURL:url];

        UIImage *image = [UIImage imageWithData:data];

    });


    //2.下载图片2

    dispatch_async(queue, ^{

        

        NSURL *url = [NSURL URLWithString:@"图片"];

        NSData *data = [NSData dataWithContentsOfURL:url];

        UIImage *image = [UIImage imageWithData:data];

    });

//    方法一:拦截方法,保证前两个任务完成,再做3.图片合成

 //并发队列不知道前面谁先请求下来,所以加dispatch_barrier_async

//dispatch_barrier_async(, <#^(void)block#>)

    

    

    //3.将图片1,图片2合成一张新的图片

    

    //4.将新图片显示出来

 

 

 */

    

    

//    方法二:

//    创建一个队列组

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, queue, ^{

        NSURL *url = [NSURL URLWithString:@"图片"];

        NSData *data = [NSData dataWithContentsOfURL:url];

        _image1 = [UIImage imageWithData:data];


        

    });

    

    

    dispatch_group_async(group, queue, ^{

        

        NSURL *url = [NSURL URLWithString:@"图片"];

        NSData *data = [NSData dataWithContentsOfURL:url];

       _image2 = [UIImage imageWithData:data];


    });

    

    //3.将图片1,图片2合成一张新的图片

//    任务一和任务二都执行完,才执行dispatch_group_notify

    dispatch_group_notify(group, queue, ^{

//      开启新的图像上下文

        UIGraphicsBeginImageContext(CGSizeMake(100, 100));

        

        //绘制图片

        [self.image1 drawInRect:CGRectMake(0, 0, 50, 100)];

        [self.image2 drawInRect:CGRectMake(50, 0, 50, 100)];

        

        //取得上下文图片

      UIImage *image  = UIGraphicsGetImageFromCurrentImageContext();

        //结束上下文

        UIGraphicsEndImageContext();

        

        //回到主线程显示图片

        dispatch_async(dispatch_get_main_queue(), ^{

            //4将图片显示过来,到storyboard

            self.imageView.image = image;

        });

        

    });

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS开发多线程之队列组——下载合并图片

1.设计思路 要合并两张图片,用Quartz2D的知识,则要先要搞一个空的大图片,然后再把两张小图片画到那张大图片上面 2.实现(由一般实现再过度到队列组) 2.1方法一(先下载第1张图片,然后下...

IOS学习 GCD 延时执行三种方法 并行/串行/主队列综合练习 队列组 shift+command+o快速查找

-(void)touchesBegan:(NSSetUITouch *> *)touches withEvent:(UIEvent *)event{        [self demo]; } ...
  • ridxmc
  • ridxmc
  • 2016-03-31 23:35
  • 2293

iOS GCD中队列组的使用--下载并且为图片添加水印

首先说一下我们的需求是这样的,第一步要在服务端下载两张图片,之后把小图片绘制到大图片上去(就是让小图片成为大图片的水印),之后我们通过分析可以知道下载两张图片属于耗时操作,而制作水印的操作相对来说耗时...

iOS--多线程GCD队列组--08

1.可以设置多个线程执行完后,需要执行的任务。#import "HMViewController.h"// 1.分别下载2张图片:大图片、LOGO // 2.合并2张图片 // 3.显示到一个imag...

GCD中的队列与任务组合对比

在GCD队列中,队列的类型不是决定是否开启线程的 队列的类型是决定调度方式的 串行队列:每次只调度一个任务,也可以开启子线程 并行队列:每次可调度多个任务,一定可以开启子线程 串行队列的调度方式决定...

GCD任务队列机制解析

/** GCD属于“并发”技术,程序员在开发的时候,不需要关心线程GCD是C语言的只需要将 “任务” 添加到 “队列” 就可以了。*任务,是使用 block 来定义的 -同步任务 - 没有创建...

GCD队列操控

队列挂起 dispatch queue可以被挂起和恢复,使用 dispatch_suspend函数来挂起,使用 dispatch_resume 函数来恢复。dispatch source也支持挂起...

GCD-异步全局队列

异步: 表示的是任务,任务有同步和异步,异步任务是可以同时执行的,同步反之

iOS 多线程: 正确认识 GCD 队列类型

在面试或者跟一些有 ios 编程经验的人聊到关于 GCD 的队列类型的问题. 很多人说自定义的 queue 是串行队列. 这种说法在一定程度上面是不对的. 今天跟大家聊聊 GCD 中的队列类型问题. ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)