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多线程及队列的使用

最近搞一款塔防游戏,提到塔防,自然就想到了A星寻路。的确,它是一种高效的寻路算法。但当很多怪物同时在调用A星算法来寻找一条最近的路径来到达目的地时,我发现会很卡。我都不能接受这个卡屏,更何况是玩家呢。...

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

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

GCD 中组队列group与Afnetworking的结合使用

学了GCD以后,对所讲解的概念都有所了解了,但是对于group创建组队列,在组队列中是正确的使用AFnetworking发送网络请求。 下面分别来说一下吧。 第一种情况,对某一个url多次请求的情...

ios多线程操作(八)—— GCD调度组

有这么一个需要,分别执行2个耗时的异步操作,等2个异步操作都执行完毕后在回到主线程执行操作。如果想要快速高效地实现这个需求,可以考虑使用调度组。 调度组的创建代码如下: dispatch_grou...

GCD 异步分组执行,当组里面的程序块运行完后在执行另外的

//分组执行 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); ...

iOS学习笔记-111.多线程10——CGD队列组图片下载合成示例

多线程10CGD队列组图片下载合成示例 一图示 二分析 三代码多线程10——CGD队列组图片下载合成示例一、图示二、分析我们现在要干的事情是:下载两张图片,下载好了以后合成这两张图片。事情的操作有先后...

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

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

IOS GCD的5种队列用法和异步、同步操作

GCD的优点:1.GCD比thread更简单易用,基于Block的的特性导致它能在不同的代码块间传递上下文。    第一种:dispatch_queue      (1)Seri...

iOS开发—使用GCD实现多线程开发—调度队列组

假设有一个音乐应用,如果要执行多个下载歌曲的任务,这些耗时的任务会被放到多个线程上异步执行,指导全部的歌曲下载完成,弹出一个提示框来通知用户歌曲已下载完成。 针对这个应用场景,可以考虑使用队列组。一个...

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

首先说一下我们的需求是这样的,第一步要在服务端下载两张图片,之后把小图片绘制到大图片上去(就是让小图片成为大图片的水印),之后我们通过分析可以知道下载两张图片属于耗时操作,而制作水印的操作相对来说耗时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GCD队列组
举报原因:
原因补充:

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