NSoperation线程通信
全局变量
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (nonatomic, strong) NSOperationQueue * queue;
懒加载
- (NSOperationQueue *)queue {
if (!_queue) {
_queue = [[NSOperationQueue alloc] init];
}
return _queue;
}
事件的响应方法
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
__block UIImage * image1;
//创建操作1
NSBlockOperation * download1 = [NSBlockOperation blockOperationWithBlock:^{
NSURL * url = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/lvpics/w=1000/sign=82800ad878cb0a4685228f395b53f724/96dda144ad3459823cc40db00ff431adcbef8442.jpg"];
NSData * data = [NSData dataWithContentsOfURL:url];
image1 = [UIImage imageWithData:data];
NSLog(@"download1- %@",[NSThread currentThread]);
}];
__block UIImage * image2;
//创建操作2
NSBlockOperation * download2 = [NSBlockOperation blockOperationWithBlock:^{
NSURL * url = [NSURL URLWithString:@"http://f.hiphotos.baidu.com/lvpics/h=800/sign=08f9c974e21190ef1efb9fdffe1a9df7/c8177f3e6709c93dfd03176e9a3df8dcd00054b1.jpg"];
NSData * data = [NSData dataWithContentsOfURL:url];
image2 = [UIImage imageWithData:data];
NSLog(@"download2- %@",[NSThread currentThread]);
}];
//创建操作3(用于合并图片)
NSBlockOperation * combine = [NSBlockOperation blockOperationWithBlock:^{
//创建位图上下文
UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), NO, 1);
//设置显示的位置
[image1 drawInRect:CGRectMake(0, 0, 200, 100)];
[image2 drawInRect:CGRectMake(0, 100, 200, 100)];
//获取当前图片上下文
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSLog(@"combine- %@",[NSThread currentThread]);
//返回主线程更新UI
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.imageView.image = image;
NSLog(@"main - %@",[NSThread currentThread]);
}];
}];
//设置操作的依赖关系
[combine addDependency:download1];
[combine addDependency:download2];
//向全局队列添加操作
[self.queue addOperations:@[download1,download2,combine] waitUntilFinished:YES];
}
最新文章
- LoadRunner免费公开课,惠普金牌讲师亲授
- 精益化设计:把敏捷方法和Lean UX相结合
- Vs2013 头文件注释
- VS2013 抛出 stackoverflow exception 的追踪
- jsp,图片显示
- 用puthivestreaming把hdfs里的数据流到hive表
- 访问WEB-INFO 目录注意事项
- 考虑与Maya结合
- PERCENT_RANK
- Eclipse或Myeclipse常用快捷键组合详解
- 用bash命令得到Windows一个目录下的所有文件并且把结果输入到一个文件
- [置顶] C++中RTTI机制剖析
- 编写可维护的javascript代码--- 2015.11.21(基本格式化)
- 批处理获取IP地址
- MYSQL数据库的套接字文件,pid文件,表结构文件
- 邓_php面试【003】——完整版
- (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)
- GPU渲染流水线的简单概括
- 安装openvpn
- DELL平板如何安装WIN10系统 -PE启动问题