iOS---GCD的三种常见用法
1.一次性代码:dispatch_once
有时候,有些代码在程序中只要被执行一次。
整个程序运行过程中,只会执行一次。
- (void)viewDidLoad
{
[super viewDidLoad]; static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
NSLog(@"代码只执行一次");
});
}
2.延时执行
延时执行通常有两种方法:
(1)普通用法
[self performSelector:@selector(run) withObject:nil afterDelay:2.0];
(2)GCD用法
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//两秒后执行的代码
NSLog(@"ahah");
});
如果队列是主队列,就在主队列中执行。如果队列是并发队列,就会开启新的线程。
//全局并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{
//两秒后执行的代码
NSLog(@"ahah");
});
2017-06-17 10:32:09.483 GCDTest[15536:2440067] 代码只执行一次
2017-06-17 10:32:11.683 GCDTest[15536:2440162] ahah --- <NSThread: 0x608000063300>{number = 3, name = (null)}
3.队列组
创建一个队列组—>
开启多个任务(将所有任务放到队列组里面,同时执行)—>
等队列组里面的所有任务都执行完成,再回到主线程执行其他操作
- (void)viewDidLoad
{
[super viewDidLoad]; //1.创建一个队列组
dispatch_group_t group = dispatch_group_create(); //全局并发队列
dispatch_queue_t global_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); //开启一个任务,放到队列组中,异步执行
dispatch_group_async(group, global_queue, ^{ NSLog(@"小红吃饭------%@",[NSThread currentThread]); }); //再开启一个任务
dispatch_group_async(group, global_queue, ^{
NSLog(@"小明吃饭------%@",[NSThread currentThread]);
}); //两个任务执行完,再执行这个
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"吃完一起回家------%@",[NSThread currentThread]);
}); }
iOS---GCD的三种常见用法的更多相关文章
- Spring源码分析之IOC的三种常见用法及源码实现(二)
Spring源码分析之IOC的三种常见用法及源码实现(二) 回顾上文 我们研究的是 AnnotationConfigApplicationContext annotationConfigApplica ...
- Spring源码分析之IOC的三种常见用法及源码实现(一)
1.ioc核心功能bean的配置与获取api 有以下四种 (来自精通spring4.x的p175) 常用的是前三种 第一种方式 <?xml version="1.0" enc ...
- jdbc三种常见用法
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
- Spring源码分析之IOC的三种常见用法及源码实现(三)
上篇文章我们分析了AnnotationConfigApplicationContext的构造器里refresh方法里的invokeBeanFactoryPostProcessors,了解了@Compo ...
- 深入学习jQuery的三种常见动画效果
× 目录 [1]显隐效果 [2]高度变化 [3]淡入淡出 前面的话 动画效果是jQuery吸引人的地方.通过jQuery的动画方法,能够轻松地为网页添加视觉效果,给用户一种全新的体验.jQuery动画 ...
- iOS GCD多线程介绍
GCD:是纯C语言写的,是苹果公司为多核的并行运算提出的解决方案. GCD的两个核心概念: - 任务 - 队列 将任务添加到队列中 GCD会自动将队列中的任务取出,放到对应的线程中执行 任务的取出遵循 ...
- iOS GCD基础篇 - 同步、异步,并发、并行的理解
1.关于GCD - GCD全称是Grand Central Dispatch - GCD是苹果公司为多核的并行运算提出的解决方案 - GCD会自动利用更多的CPU内核(比如双核.四核) - GC ...
- iBatis一些非见用法(相当实用)
兼顾效率,iBatis一些非见用法(10条) 2009-09-18 10:33:03 标签:iBatis 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声 ...
- Android应用开发中三种常见的图片压缩方法
Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...
随机推荐
- [转载红鱼儿]delphi 实现微信开发(1)
大体思路: 1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员.) 2.kbmmw web server收到消息,生成一个图文消息给微信,在图文消息中做好自己的url,在u ...
- 利用ajaxSubmit()方法实现Form提交表单后回调
1. 背景 最近在工作中,需要实现网页端图片上传到FTP服务器的功能.上传文件是用Form表单提交数据的方法向后台传输文件流,在此遇到了一个问题:后台在处理完图片上传功能后,需要向前台回传是 ...
- 打开yii2控制台命令
1.在控制台中切换到yii2控制台入口文件的工作路径.如:C:\users\2016-01>D:www\blogdemo\yii
- Shell获取当前路径
PRG="$0" while [ -h "$PRG" ]; do ls=`ls -ld "$PRG"` link=`expr "$ ...
- Matlab 中以分数显示结果
转http://www.blogbus.com/shijuanfeng-logs/234881647.html Matlab,计算得到的结果一般是小数形式. 但为了更精确表示,我们有时候需要用到分数形 ...
- 1) Spring_HelloWorld
1. Spring Tool Suite™ 方式一:下载对应eclipse版本的文件,离线安装 4.4.2 springsource-tool-suite-3.6.4.RELEASE-e4.4.2-u ...
- OpenGL + MFC
OpenGL超级宝典(中文版) 2001年 本书是一本完整而详尽的关于OpenGL的参考书,全书分为四部分:第一部分“OpenGL导言”介绍3D图形学的基本原理,读者将在此学会构造使用OpenGL的程 ...
- 《Forward团队-爬虫豆瓣top250项目-代码设计规范》
成员:马壮,李志宇,刘子轩,年光宇,邢云淇,张良 1.缩进采用一个Tab键 2.大括号:如: if (条件){ 语句: } 3.分行:不把多条语句放在同一行 4.变量命名:统一用英文 5.注释:注释前 ...
- Linux 系统中进程5中常见状态
运行.中断.不可终端.僵死.停止 R(运行):正在运行 or 在运行队列中等待: S(中断):处于休眠中,等待接收信号,并脱离改状态: D(不可中断):不响应信号输入,即使kill也不起作用: Z(僵 ...
- (KMP 求循环节)The Minimum Length
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70325#problem/F The Minimum Length Time Limit: ...