GCD的其他方法
1.栅栏函数
作用:控制线程的执行顺序
注:栅栏函数不能使用全局并发队列
-(void)barrier
{
//1.创建队列(并发队列)
dispatch_queue_t queue = dispatch_queue_create("com.downloadqueue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ for (NSInteger i = ; i<; i++) {
NSLog(@"%zd-download1--%@",i,[NSThread currentThread]);
}
}); dispatch_async(queue, ^{ for (NSInteger i = ; i<; i++) {
NSLog(@"%zd-download2--%@",i,[NSThread currentThread]);
}
}); //栅栏函数
dispatch_barrier_async(queue, ^{
NSLog(@"我是一个栅栏函数");
}); dispatch_async(queue, ^{ for (NSInteger i = ; i<; i++) {
NSLog(@"%zd-download3--%@",i,[NSThread currentThread]);
}
}); dispatch_async(queue, ^{ for (NSInteger i = ; i<; i++) {
NSLog(@"%zd-download4--%@",i,[NSThread currentThread]);
}
});
}
栅栏函数
2.延迟执行
-(void)delay
{
NSLog(@"----");
//表名2秒钟之后调用run
// [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES]; /*
第一个参数:延迟时间
第二个参数:要执行的代码
*/
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_global_queue(, ), ^{
NSLog(@"---%@",[NSThread currentThread]);
}); }
延迟执行
3.一次性代码
程序运行过程中只执行一次,执行一次后永远都不执行
-(void)once
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"+++++++++");
});
}
一次性代码
4.快速迭代
-(void)applay
{
// for (NSInteger i=0; i<10; i++) {
// NSLog(@"%zd--%@",i,[NSThread currentThread]);
// } //创建队列(并发队列)
dispatch_queue_t queue = dispatch_queue_create("com.downloadqueue", DISPATCH_QUEUE_CONCURRENT);
/*
第一个参数:迭代的次数
第二个参数:在哪个队列中执行
第三个参数:block要执行的任务
*/
dispatch_apply(, queue, ^(size_t index) {
NSLog(@"%zd--%@",index,[NSThread currentThread]);
});
}
快速迭代
//文件在哪个地方(文件夹) NSString *form = @"/Users/xiaomage/Desktop/form"; //要剪切到什么地方 NSString *to = @"/Users/xiaomage/Desktop/to"; NSFileManager *manager = [NSFileManager defaultManager]; //获取文件夹下子文件/子文件夹的路径 //可以获取到子文件和子文件夹的路径 NSArray *subpaths = [manager subpathsAtPath:form]; // 可以获取到子文件和子文件夹的路径
NSDirectoryEnumerator *enumer = [manager enumeratorAtPath:to]; //只能获取子文件的路径 NSDirectoryEnumerator *enumer = [manager directoryContentsAtPath:form]; //创建队列(并发队列) dispatch_queue_t queue = dispatch_queue_create("com.downloadqueue", DISPATCH_QUEUE_CONCURRENT); NSInteger count = [subpaths count]; dispatch_apply(count, queue, ^(size_t index) { NSString *subpath = subpaths[index]; NSString *fullPath = [form stringByAppendingPathComponent:subpath]; //拼接目标文件全路径 NSString *fileName = [to stringByAppendingPathComponent:subpath]; //剪切操作 [manager moveItemAtPath:fullPath toPath:fileName error:nil]; NSLog(@"%@",[NSThread currentThread]); });
用快速迭代实现文件夹内容的转移
5.队列组
有这么1种需求
首先:分别异步执行2个耗时的操作
-(void)group
{
//下载图片1 //创建队列组
dispatch_group_t group = dispatch_group_create(); //1.开子线程下载图片
//创建队列(并发)
dispatch_queue_t queue = dispatch_get_global_queue(, ); dispatch_group_async(group, queue, ^{
//1.获取url地址
NSURL *url = [NSURL URLWithString:@"http://www.huabian.com/uploadfile/2015/0914/20150914014032274.jpg"]; //2.下载图片
NSData *data = [NSData dataWithContentsOfURL:url]; //3.把二进制数据转换成图片
self.image1 = [UIImage imageWithData:data]; NSLog(@"1---%@",self.image1);
}); //下载图片2
dispatch_group_async(group, queue, ^{
//1.获取url地址
NSURL *url = [NSURL URLWithString:@"http://img1.3lian.com/img2011/w12/1202/19/d/88.jpg"]; //2.下载图片
NSData *data = [NSData dataWithContentsOfURL:url]; //3.把二进制数据转换成图片
self.image2 = [UIImage imageWithData:data];
NSLog(@"2---%@",self.image2); }); //合成
dispatch_group_notify(group, queue, ^{ //开启图形上下文
UIGraphicsBeginImageContext(CGSizeMake(, )); //画1
[self.image1 drawInRect:CGRectMake(, , , )]; //画2
[self.image2 drawInRect:CGRectMake(, , , )]; //根据图形上下文拿到图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); //关闭上下文
UIGraphicsEndImageContext(); dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
NSLog(@"%@--刷新UI",[NSThread currentThread]);
});
});
}
用队列组合成网络上的两个图片
GCD的其他方法的更多相关文章
- GCD部分使用方法
1,用gcd延迟运行任务 假设我们须要某个方法在一段时间后运行.那么我们经常会调用这个方案 - (void)viewDidLoad{ [super viewDidLoad]; [self perfor ...
- 网络与多线程---OC中多线程方法GCD(二)
小编在前一篇中介绍了多线程实现的五种常用方法.在接下来所介绍的这种方法是最具有魅力的,最具有诱惑的实现多线程的方案---GCD 一.什么是GCD GCD是Grand Central Dispatch的 ...
- GCD in Swfit 3.0
这里包括了Queue, Group, Barrier, Semaphore等内容.基本上常用的GCD对象和方法在Swift3.0的改变都囊括其中. 代码在这里:https://github.com/f ...
- GCD与block
GCD技术多线程编程的三个技术 NSThread NSOperation GCD1.GCD(Grand central Dispatch:宏大的中央调度) 1) 是用纯C语言实现的.提 ...
- iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组
一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD的优势 G ...
- IOS GCD使用实例大全
GCD是大家在IOS开发过程中经常使用的一种多线程管理机制.原理这里就不多说了,大家关心的大部分都是它的使用,下面主要介绍GCD的主要方法及其实例. 1.认识主队列,感受串行队列的运行,运行结果打印的 ...
- iOS多线程GCD的使用
1. GCD 简介 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Di ...
- GCD(III)
GCD 线程间的通信 在iOS开发过程中,我们一般在主线程里边进行UI刷新,例如:点击.滚动.拖拽等事件.我们通常把一些耗时的操作放在其他线程,比如说图片下载.文件上传等耗时操作.而当我们有时候在其他 ...
- iOS 多线程:『GCD』详尽总结
本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法.这大概是史上最详细.清晰的关于 GCD 的详细讲解+总结的文章了.通过本文,您将了解到: 1. GCD 简介 2. GCD 任务和队列 ...
随机推荐
- Viking Village维京村落demo中的地面积水效果
效果如下: 似乎是通过高光贴图实现的,查找后发现具体在这: 它使用了基于Standard的TerrainSurface自定义Shader,关闭该帖图后效果消失: 这个TerrainSurfaceSha ...
- 怎样使用 GitHub?
作者:珊姗是个小太阳链接:https://www.zhihu.com/question/20070065/answer/79557687来源:知乎著作权归作者所有,转载请联系作者获得授权. 作为一个文 ...
- OpenCV安装配置的简单记录
在ubuntu16.04下安装OpenCV 2.4.11的简单记录 1. 安装cmake,执行$apt-get install cmake即可,cmake -version验证 2. 下载OpenCV ...
- Nginx的负载均衡 - 整体架构
Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...
- [问题2014A06] 解答
[问题2014A06] 解答 用反证法, 设存在 \(n\) 阶正交阵 \(A,B\), 使得 \[A^2=cAB+B^2,\,\,c\neq 0.\cdots(1)\] 在 (1) 式两边同时左乘 ...
- excel如何用公式判断单元格的值是否为数字、英文、中文,以及相应的计数
一.excel如何用公式判断单元格的值是否为数字.英文.中文. A列为数据列,B列为判断列=LOOKUP(CODE(ASC(A1)),{48,65,123;"数字","英 ...
- Linux下内存占用和CPU占用的计算
->使用free命令查看内存使用情况: 1.echo 3 > /proc/sys/vm/drop_caches 2.free 或者使用cat /proc/yourpid/status 来查 ...
- javascript 函数声明和函数表达式的区别(学习笔记)
javascript中声明函数的方法有两种:函数声明式和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函 ...
- WebSocket实战之————Workerman服务器的安装启动
安装php apt-get install php5-cli root@iZ23b64pe35Z:/home/www# php -v PHP 5.5.9-1ubuntu4.20 (cli) (buil ...
- BootStrapt iCheck表单美化插件使用方法详解(含参数、事件等) 全选 反选
特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 — 包括 桌面和移动设备 2.支持触摸设备 — iOS.Android.BlackBerry.Windows Phone等系统 4.方便 ...