网络多线程-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
@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
相关文章推荐
- 网络多线程 - 01-掌握-GCD快速迭代
- 08 SimpleServer
- Tornado源码分析之http服务器篇
- 关闭手机的通讯网络(无法接通)
- NodeJS服务器:一行代码 = 一个的HTTP服务器
- 计算机网络基础笔记
- centos配置网络的问题(ip地址、DNS、主机名)
- Java——多人聊天室(基于TCP的网络编程——Socket)
- 神经网络
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 6.通讯控制器的设计
- socket网络编程
- 关于电脑DNS出错,如何修复和手动设置DNS
- 网络通信加密处理
- 网络部分整理第三部分(XML解析)
- Android使用okhttp下载图片
- iOS 开发笔记-AFNetWorking https SSL认证
- 机器学习--神经网络
- TCP
- 黑马程序员—Java基础—网络编程
- 用AsyncHttpClient访问xml页面