多线程 GCD队列组
// DYFViewController.m// 623-08-队列组//// Created by dyf on 14-6-23.// Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved.//#import "DYFViewController.h"@interface DYFViewController ()@property (weak, nonatomic) IBOutlet UIImageView *iconV1;@property (weak, nonatomic) IBOutlet UIImageView *iconV2;@property (weak, nonatomic) IBOutlet UIImageView *bigIconV;@end@implementation DYFViewController- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"%@", [NSThread currentThread]); dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); __block UIImage *icon1 = nil; dispatch_group_async(group, queue, ^{ NSLog(@"%@", [NSThread currentThread]); // }); __block UIImage *icon2 = nil; dispatch_group_async(group, queue, ^{ NSLog(@"%@", [NSThread currentThread]); // icon2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"]; }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ NSLog(@"%@", [NSThread currentThread]); // self.iconV1.image = icon1; self.iconV2.image = icon2; UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0); [icon1 drawInRect:CGRectMake(0, 0, 100, 100)]; [icon2 drawInRect:CGRectMake(100, 0, 100, 100)]; self.bigIconV.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); });}- (UIImage *)imageWithURL:(NSString *)iconPath{ NSLog(@"%@", [NSThread currentThread]); NSURL *url = [NSURL URLWithString:iconPath]; NSData *data = [NSData dataWithContentsOfURL:url]; return [UIImage imageWithData:data];}@end小结:
------------队列组------
1.有这么一种需求
·首先:分别异步执行2个耗时的操作
·其次:等2各异步操作都执行完毕后,再回到主线程执行操作
2.若想要快速高效的实现上述需求,可以考虑用队列组
多线程 GCD队列组的更多相关文章
- iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组
一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD的优势 G ...
- OC 线程操作 - GCD队列组
1.队列组两种使用方法2.队列组等待 wait /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ ...
- OC - GCD 队列组 - 下载图片画图
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self downloadIma ...
- 多线程基础(七)GCD线程组+栅栏函数
1.GCD队列组 拦截通知和等待所有任务全部结束在继续往下执行|阻塞 需求:下载两张图片,等两张图片都下载完毕之后,合成图片(这个实例,复习的时候一定要凭空敲出代码练习,好记性不如烂键 ...
- iOS多线程GCD的使用
1. GCD 简介 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Di ...
- AJ学IOS(51)多线程网络之GCD下载合并图片_队列组的使用
AJ分享,必须精品 合并图片(图片水印)第一种方法 效果 实现: 思路: 1.分别下载2张图片:大图片.LOGO 2.合并2张图片 3.显示到一个imageView身上 // 异步下载 dispatc ...
- 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...
- 关于GCD同步组实现多个异步线程的同步执行中的注意点
在App开发中经常会遇到多个线程同时向服务器取数据, 如果每个线程取得数据后都去刷新UI会造成界面的闪烁 也有可能出现部分数据还没有获取完毕造成程序crash 之前在网上看到很多是利用dispatch ...
- iOS多线程——GCD与NSOperation总结
很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不 ...
随机推荐
- java关于数组之间的相互赋值
java中数组是被当作对象看待,假设a,b为两个已经初始化的数组,那么语句a=b就表示把b数组对象的引用赋值给a,那么a和b就指向了同一个数组,无论用哪个来操作都影响其指向的数组.原来a指向的数组现在 ...
- mybatis是什么?(二)
mybatis是什么? mybatis是一个持久层的框架,是apache下的顶级项目. mybatis托管到goolecode下,再后来托管到github下(https://github.com/my ...
- Android笔记之DrawerLayout的基本使用
效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...
- 11、JavaScript 比较和逻辑运算符
- 【Effective C++】设计与声明
条款18:让接口容易被正确使用,不易被误用 1,好的接口很容易被正确使用,不容易被误用.你应该在你的所有接口中努力达成这些性质. 2,“促进正使用”的办法包括接口的一致性,以及与内置类型的行为兼容. ...
- Gradle sync failed: Connection timed out: connect
打开AS的project试图,找到gradle目录下的wrapper下面的gradle wrapper.properities找到: distributionUrl=https\://services ...
- php高级技巧总结
通过对<深入理解PHP:高级技巧.面向对象与核心技术>这本书的学习,总结出常用的php高级技巧,也方便自己以后查阅;我认为该书是php高级教程的葵花宝典,哈哈.里面的内容很实用,尤其是在项 ...
- 2U网络机箱的尺寸是多少,4U网络机箱的尺寸是多少
厚度以4.445cm为基本单位.1U就是4.445cm,2U则是1U的2倍为8.89cm.48.26cm=19英寸,如果是标准的机架式设备,宽应该是满足这个标准的.纵深的话 有600mm或者800mm ...
- python中的不可变类型和可变类型
在python中整形,字符串,元组是不可变类型,而列表和字典都是可变类型. 对于不可变类型进行重新赋值,相当于是用以前的变量名重新指向了新的地址,这个地址中存的变量值就是重新的赋值 通过python中 ...
- 在JS中将指定表单内的“具有name数据的表单元素的值”封装为Get形式的字符串
//封装post时候,表单中所有具有name数据的表单元素的值,并返回“n=1&p=a” function serialize(formid) { var arr = []; var ipts ...