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];
}
NSoperation线程通信的更多相关文章
- 第23章 java线程通信——生产者/消费者模型案例
第23章 java线程通信--生产者/消费者模型案例 1.案例: package com.rocco; /** * 生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二, ...
- Linux下c开发 之 线程通信(转)
Linux下c开发 之 线程通信(转) 1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linu ...
- C# 线程通信 一
C#多线程通信 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- java多线程-线程通信
线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线 ...
- Java---Condition控制线程通信
java中控制线程通信的方法有:1.传统的方式:利用synchronized关键字来保证同步,结合wait(),notify(),notifyAll()控制线程通信.不灵活. 2.利用Conditio ...
- Java 线程通信
线程通信用来保证线程协调运行,一般在做线程同步的时候才需要考虑线程通信的问题. 1.传统的线程通信 通常利用Objeclt类提供的三个方法: wait() 导致当前线程等待,并释放该同步监视器的锁定, ...
- Java核心知识点学习----使用Condition控制线程通信
一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-> ...
- java笔记--关于线程通信
关于线程通信 使用多线程编程的一个重要原因就是线程间通信的代价比较小 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897773.h ...
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...
随机推荐
- 相同版本的CDH集群间迁移hdfs以及hbase
前言 由于项目数据安全的需要,这段时间看了下hadoop的distcp的命令使用,不断的纠结的问度娘,度娘告诉我的结果也让我很纠结,都是抄来抄去, 还好在牺牲大量的时间的基础上还终于搞出来了,顺便写这 ...
- Castle ActiveRecord框架学习(二):快速搭建简单博客网站
一.数据库 1.数据表 Category:类别标签表(字段Type=1为类别,Type=2为标签) Category_Post:类别标签与文章中间表 Post:文章表 Comment:评论表 2.数据 ...
- Castle ActiveRecord框架学习(一)
一.Active Record(活动记录)模式 Active Record是业务逻辑层中(<企业应用架构模式>将该模式归为数据源模式)常用的一种框架模式,尤其在底层数据库模型匹配业务模型时 ...
- iOS阶段学习第六天笔记(数组)
iOS学习( ...
- Java List双击事件
1. 定义一个MouseListener: 2. 在mouseListener中增加mouseClicked事件: 3. 由MouseEvent的getSource()获得List对象: 4. 由Li ...
- DokuWiki整合Zentao的用户授权及分组体系
老外们把精力都放在了怎样做通用性上面了. Doku后台有切换授权方式的选项,改成mysql. 注:如下修改mysql.conf.php后,要把分组和权限设置结合起来,还需要配置dokuwiki的分组, ...
- django pdb
import pdb; pdb.set_trace() http://charlee.li/debug-djangp-with-pdb.html https://github.com/tomchr ...
- 动态加载HTML后使用query修改标签样式
下面的IMG 标签的宽度从后台返回是10PX,加载完毕后,修改成100PX,注意:拼接的代码在 body标签之后,或则直接在HTML外面增加也可以 <html> <head> ...
- PostgreSQL除法保留小数
select round(1::numeric/4::numeric,3);结果为0.25 select round( cast ( 1 as numeric )/ cast( 4 as numeri ...
- No.016:3Sum Closest
问题: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...