您的位置:首页 > 理论基础 > 计算机网络

网络多线程-GCD队列组

2015-11-27 21:32 429 查看
#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

{
4000

    [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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: