全局变量

@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];
    
}

最新文章

  1. LoadRunner免费公开课,惠普金牌讲师亲授
  2. 精益化设计:把敏捷方法和Lean UX相结合
  3. Vs2013 头文件注释
  4. VS2013 抛出 stackoverflow exception 的追踪
  5. jsp,图片显示
  6. 用puthivestreaming把hdfs里的数据流到hive表
  7. 访问WEB-INFO 目录注意事项
  8. 考虑与Maya结合
  9. PERCENT_RANK
  10. Eclipse或Myeclipse常用快捷键组合详解
  11. 用bash命令得到Windows一个目录下的所有文件并且把结果输入到一个文件
  12. [置顶] C++中RTTI机制剖析
  13. 编写可维护的javascript代码--- 2015.11.21(基本格式化)
  14. 批处理获取IP地址
  15. MYSQL数据库的套接字文件,pid文件,表结构文件
  16. 邓_php面试【003】——完整版
  17. (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)
  18. GPU渲染流水线的简单概括
  19. 安装openvpn
  20. DELL平板如何安装WIN10系统 -PE启动问题

热门文章

  1. Java魔法堂:类加载器入了个门
  2. SQL --分组【Group By】
  3. ASP.NET MVC系列:添加控制器
  4. web前端学习笔记---实现雪花飘落的效果
  5. 使用ExpandoObject来实现多个Model传送至视图
  6. PHP条件语句语法与示例
  7. ab网站压力测试
  8. visual C++ 项目和解决方案的区别
  9. 提高生产性工具 - Model代码生成器(二)
  10. LeetCode123:Best Time to Buy and Sell Stock III