IOS GCD03-其他用法
- #define global_queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
- #define main_queue dispatch_get_main_queue()
- #import "HMViewController.h"
- @interface HMViewController ()
- @property (weak, nonatomic) IBOutlet UIImageView *imageView1;
- @property (weak, nonatomic) IBOutlet UIImageView *imageView2;
- @property (weak, nonatomic) IBOutlet UIImageView *bigImageView;
- @end
- @implementation HMViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- // 图片1: http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg
- // 图片2: http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg
- /**
- 1.下载图片1和图片2
- 2.将图片1和图片2合并成一张图片后显示到imageView上
- 思考:
- * 下载图片 : 子线程
- * 等2张图片都下载完毕后, 才回到主线程
- */
- }
- - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- // 创建一个组
- dispatch_group_t group = dispatch_group_create();
- // 开启一个任务下载图片1
- __block UIImage *image1 = nil;
- dispatch_group_async(group, global_queue, ^{
- image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
- });
- // 开启一个任务下载图片2
- __block UIImage *image2 = nil;
- dispatch_group_async(group, global_queue, ^{
- image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"];
- });
- // 同时执行下载图片1\下载图片2操作
- // 等group中的所有任务都执行完毕, 再回到主线程执行其他操作
- dispatch_group_notify(group, main_queue, ^{
- self.imageView1.image = image1;
- self.imageView2.image = image2;
- // 合并
- UIGraphicsBeginImageContextWithOptions(CGSizeMake(, ), NO, 0.0);
- [image1 drawInRect:CGRectMake(, , , )];
- [image2 drawInRect:CGRectMake(, , , )];
- self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
- // 关闭上下文
- UIGraphicsEndImageContext();
- });
- // if (self.log == NO) {
- // NSLog(@"-------touchesBegan");
- // self.log = YES;
- // }
- // static dispatch_once_t onceToken;
- // dispatch_once(&onceToken, ^{
- // NSLog(@"-------touchesBegan");
- // });
- }
- - (void)downlaod2image
- {
- dispatch_async(global_queue, ^{
- NSLog(@"下载图片---%@", [NSThread currentThread]);
- // 下载图片1
- UIImage *image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
- NSLog(@"下载完图片1---%@", [NSThread currentThread]);
- // 下载图片2
- UIImage *image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
- NSLog(@"下载完图片2---%@", [NSThread currentThread]);
- dispatch_async(main_queue, ^{
- NSLog(@"显示图片---%@", [NSThread currentThread]);
- self.imageView1.image = image1;
- self.imageView2.image = image2;
- // 合并
- UIGraphicsBeginImageContextWithOptions(CGSizeMake(, ), NO, 0.0);
- [image1 drawInRect:CGRectMake(, , , )];
- [image2 drawInRect:CGRectMake(, , , )];
- self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
- // 关闭上下文
- UIGraphicsEndImageContext();
- });
- });
- }
- - (UIImage *)imageWithURL:(NSString *)urlStr
- {
- NSURL *url = [NSURL URLWithString:urlStr];
- NSData *data = [NSData dataWithContentsOfURL:url]; // 这行会比较耗时
- return [UIImage imageWithData:data];
- }
- - (void)delay
- {
- // NSLog(@"----touchesBegan----%@", [NSThread currentThread]);
- // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- // [self performSelector:@selector(run) withObject:nil afterDelay:2.0];
- // });
- // 1.全局并发队列
- dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );
- // 2.计算任务执行的时间
- dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));
- // 3.会在when这个时间点, 执行queue中的任务
- dispatch_after(when, queue, ^{
- NSLog(@"----run----%@", [NSThread currentThread]);
- });
- }
- //- (void)run
- //{
- // NSLog(@"----run----%@", [NSThread currentThread]);
- //}
- @end
IOS GCD03-其他用法的更多相关文章
- IOS NSUserDefaults 讲解 用法
IOS NSUserDefaults 讲解 用法 NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...
- ios Block详细用法
ios Block详细用法 ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的 ...
- 【转】IOS NSTimer 定时器用法总结
原文网址:http://my.oschina.net/u/2340880/blog/398598 NSTimer在IOS开发中会经常用到,尤其是小型游戏,然而对于初学者时常会注意不到其中的内存释放问题 ...
- iOS block的用法
本章学习目标: 1. 了解何谓block. 2. 了解block的使用方法. Block 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程式设计的范围,对初学者来说也不是很容 ...
- IOS NSTimer 定时器用法总结
NSTimer在IOS开发中会经常用到,尤其是小型游戏,然而对于初学者时常会注意不到其中的内存释放问题,将其基本用法总结如下: 一.初始化方法:有五种初始化方法,分别是 + (NSTimer *)ti ...
- iOS block的用法 by -- 周傅琦君
X.1 初探Block X.1.1 宣告和使用Block 我们使用「^」运算子来宣告一个block变数,而且在block的定义最后面要加上「;」来表示一个完整的述句(也就是将整个block定义视为前面 ...
- iOS UIApplication sharedapplication用法
应用中打开其他应用 我们来讨论一下,在iOS开发中,如何实现从app1打开app2. 基本的思路就是,可以为app2定义一个URL,在app1中通过打开这个URL来打开app2,在此过程中,可以传送一 ...
- iOS自动布局进阶用法
本文主要介绍几个我遇到并总结的相对高级的用法(当然啦牛人会觉得这也不算什么). 简单的storyboard中上下左右约束,固定宽高啥的用法在这里就不做赘述了. autolayout自动布局是iOS6以 ...
- 【转】iOS自动布局进阶用法
原文网址:http://www.cnblogs.com/dsxniubility/p/4266581.html 本文主要介绍几个我遇到并总结的相对高级的用法(当然啦牛人会觉得这也不算什么). 简单的s ...
- IOS私人API用法
先要使用class-dump 和dumpFrameworks.pl 工具 将ios的framework导出来. 下面是工具的下载地址: class-dump下载地址http://www.codethe ...
随机推荐
- restframework CBV试图的4种方式
day100 上节回顾 1 APIView流程 2 序列化组件(restframework) 1 # 自定义序列化组件 class BookSerializers(serializers.Serial ...
- Appium——appium之mac环境安装
一.安装brew:Homebrew是一款Mac OS平台下的软件包管理工具执行:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubuserco ...
- Linux字符设备驱动--Led设备驱动
①驱动源码 #include <linux/module.h> #include <linux/init.h> #include <linux/cdev.h> #i ...
- java web关于文件上传下载的总结
文件上传使用<form method="POST" enctype="multipart/form-data"> , 而不是默认的applica ...
- 2----scrapy框架之代理and日志级和请求传参
一.代理 爬虫文件 daili.py class DailiSpider(scrapy.Spider): name = 'daili' #allowed_domains = ['www.xxx.com ...
- Linux添加、创建新用户
给Linux添加新用户,新建用户,新建帐号 添加用户组 sudo groupadd groupname 添加用户 sudo useradd username -m -s /bin/bash -d /h ...
- javascript 例外处理Try{}catch(e){}
程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers).如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面.否则,就会 ...
- inventor安装失败怎样卸载安装inventor 2014?
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- Murano Weekly Meeting 2016.06.28
Meeting time: 2016.June.28 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: 1. ...
- winscp介绍与使用
winscp介绍 WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端.同时支持 SCP 协议.它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑 ...