网络多线程-GCD队列组

#import "ViewController.h"


@interface ViewController ()

/** 图片1*/

@property(nonatomic ,strong) UIImage *image1;

/** 图片2*/

@property(nonatomic ,strong) UIImage *image2;

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end


@implementation ViewController


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

{

    [self test];

}

-(void)group

{

    //1.创建队列组

    dispatch_group_t group = dispatch_group_create();

    

    //2.创建并发队列

    dispatch_queue_t queue = dispatch_queue_create("downlaod", DISPATCH_QUEUE_CONCURRENT);

    

    //3.下载图片1

    dispatch_group_async(group, queue, ^{

        

        NSURL *url = [NSURL URLWithString:@"http://img5.hao123.com/data/1_02d75d1d077f83a767fb530ac4a0b80d_510"];

        NSData *data = [NSData dataWithContentsOfURL:url];

        self.image1 = [UIImage imageWithData:data];

        

        NSLog(@"1-----%@",[NSThread currentThread]);

    });

    

    //4.下载图片2

    dispatch_group_async(group, queue, ^{

        

        NSURL *url = [NSURL URLWithString:@"http://img1.gamedog.cn/2013/11/12/95-1311120Z3400.jpg"];

        NSData *data = [NSData dataWithContentsOfURL:url];

        self.image2 = [UIImage imageWithData:data];

        

        NSLog(@"2-----%@",[NSThread currentThread]);

    });

    

    //5.合成图片

    dispatch_group_notify(group, queue, ^{

        NSLog(@"3-----%@",[NSThread currentThread]);

        

        //4.1 开启图形上下文

        UIGraphicsBeginImageContext(CGSizeMake(200, 200));

        

        //4.2 画图1

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

        

        //4.3 画图2

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

        

        //4.4 拿到图片

        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

        

        

        //4.5 关闭上下文

        UIGraphicsEndImageContext();

        

        dispatch_async(dispatch_get_main_queue(), ^{

            self.imageView.image = image;

            

            NSLog(@"UI-----%@",[NSThread currentThread]);

        });


    });

}

-(void)barrier

{

    //需求:下载两张图片,合并图片并且显示出来

    

    //1.创建并发队列

    dispatch_queue_t queue = dispatch_queue_create("downlaod", DISPATCH_QUEUE_CONCURRENT);

    

    //2.下载图片1

    dispatch_async(queue, ^{

        

        NSURL *url = [NSURL URLWithString:@"http://img5.hao123.com/data/1_02d75d1d077f83a767fb530ac4a0b80d_510"];

        NSData *data = [NSData dataWithContentsOfURL:url];

        self.image1 = [UIImage imageWithData:data];

        

        NSLog(@"1-----%@",[NSThread currentThread]);

    });

    

    //3.下载图片2

    dispatch_async(queue, ^{

        

        NSURL *url = [NSURL URLWithString:@"http://img1.gamedog.cn/2013/11/12/95-1311120Z3400.jpg"];

        NSData *data = [NSData dataWithContentsOfURL:url];

        self.image2 = [UIImage imageWithData:data];

        

        NSLog(@"2-----%@",[NSThread currentThread]);

    });

    

    dispatch_barrier_async(queue, ^{

        NSLog(@"++++++++");

    });

    //4.合成图片

    dispatch_async(queue, ^{

        

        NSLog(@"3-----%@",[NSThread currentThread]);

        

        //4.1 开启图形上下文

        UIGraphicsBeginImageContext(CGSizeMake(200, 200));

        

        //4.2 画图1

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

        

        //4.3 画图2

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

        

        //4.4 拿到图片

        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

        

        

        //4.5 关闭上下文

        UIGraphicsEndImageContext();

        

        dispatch_async(dispatch_get_main_queue(), ^{

            self.imageView.image = image;

            

            NSLog(@"UI-----%@",[NSThread currentThread]);

        });

    });

    

//    dispatch_release(queue);

}


-(void)test

{

    //队列

    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

    

    /*

     第一个参数:队列

     第二个参数:函数的参数

     第三个参数:函数

     */

    NSString *param = @"abc";

    dispatch_async_f(queue, (__bridge void *)(param), run);

}



void run(void *param)

{

    NSLog(@"-----run----%@---%@",[NSThread currentThread],param);

}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值