GCD的简单使用方法
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/like7xiaoben/article/details/25629365
/*
创建一个队列用来运行任务。TA属于系统提前定义的并行队列即全局队列。眼下系统提前定义了四个不同运行优先级的全局队列,我们能够通过dispatch_get_global_queue来获取它们
四种优先级
DISPATCH_QUEUE_PRIORITY_HIGH
DISPATCH_QUEUE_PRIORITY_DEFAULT
DISPATCH_QUEUE_PRIORITY_LOW
DISPATCH_QUEUE_PRIORITY_BACKGROUND
不得已情况下可用dispatch_queue_create("newQueue", NULL); 创建。注意假设用此种方法创建需调用dispatch_release(queue)来释放此队列
*/
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//运行队列
dispatch_async(queue, ^{
//此队列运行的代码
});
//假设有多个队列运行,能够创建一个队列数组
dispatch_group_t queueGroup = dispatch_group_create();
//把一个个队列加入到数组中。先把任务加入到队列,然后再把队列和数组关联
dispatch_group_async(queueGroup, queue, ^{
//要运行的任务
});
/*
dispatch_group_notify
指定一个额外的程序块,该程序块将在组中的全部程序块即将运行完毕时运行
dispatch_get_main_queue()
系统默认的一个串行队列与主线程功能同样。
实际上,提交至main queue的任务会在主线程中运行,main queue能够调用dispatch_get_main_queue()来获得。由于main queue是与主线程相关的
*/
dispatch_group_notify(queueGroup, dispatch_get_main_queue(), ^{
//运行代码
});
//获取运行的队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//运行完后运行此处代码
});
//dispatch_barrier_async是在前面的任务运行结束后它才运行。并且它后面的任务等它运行完毕之后才会运行
dispatch_barrier_async(queue, ^{
//运行代码
});
//dispatch_apply 运行某个代码片段N次
dispatch_apply(5, queue, ^(size_t index) {
// 运行5次
});
/*
回归主线程
__block 能够在block内部改动的变量,用此修饰符标识
*/
__block NSString *updateStr = @"1";
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"回归主线程");
updateStr = @"2";
});
//取代for循环 假设for循环中处理的任务是可并发的(并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上仅仅有一个程序在处理机上运行),显然放到一个线程中处理是非常慢的。GCD提供两个函数dispatch_apply和dispatch_apply_f,dispatch_apply是用于Block的,而dispatch_apply_f能够用于c函数,它们能够替代可并发的for循环。来并行的运行而提高运行效率
int count = 10;
for (int i = 0; i < count; i++) {
//do a lot of work here.
}
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_apply(count, queue, ^(size_t i) {
//do a lot of work here.
});GCD的简单使用方法的更多相关文章
- iOS 线程之GCD的高级使用方法
之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及样例说明,今天因为项目中有特殊的应用GCD的实例,为大家介绍两种特殊需求的使用GCD的方法. 目的:实现一件事情做完,再做下一件事情. ...
- MySQL笔记-最简单的方法来解决找不到mysqld.sock文件的问题
首先,环境:ubuntu 14.04,采用apt-get的方式安装的,手动安装可能路径设置稍有区别. 1.安装MySQL后,用命令行首次启动时发现找不到Mysqld.sock文件,提示: ERROR ...
- mfc显示静态图片最简单的方法
一致都是研究如何调用opencv显示动态图片,但是很多时候在显示图标的时候,都是需要显示静态图片,现在将最简单的方法总结下: 1.添加picture控件 2.添加资源,要求为bmp 3.修改属性 结果 ...
- ECshop设置301最快捷最简单的方法
ECshop设置301最快捷最简单的方法 在 init.php中加入以下代码 if (strtolower($_SERVER['SERVER_NAME'])!='www.fz1688.com') { ...
- git 的简单使用方法
git 的简单使用方法1. 服务器 安装完成2. ssh 中的账号创建完成3. 创建 ssh 账号,会在 ssh 的安装目录下的home 目录里面,多了用户家目录4. 进入该目录 ,创建一个新的文件夹 ...
- JavaScript,一个超级简单的方法判断浏览器的内核前缀
先说明,此处的方法是说超级简单的方法,不是指代码超级少,而是用非常简单的知识点,只要懂得怎么写JavaScript的行内样式就可以判断. 大家应该还记得JavaScript行内样式怎么写吧?(看来我是 ...
- NET MVC1项目升级到MVC2最简单的方法
NET MVC1项目升级到MVC2最简单的方法 把MVC1项目升级到MVC2,最简单的做法如下: 新建MVC2项目 新建一个MVC2项目,把原来MVC1的项目文件全部拷贝到新建MVC2项目目录里,依照 ...
- js 获取当天23点59分59秒 时间戳 (最简单的方法)
js 获取当天23点59分59秒 时间戳 (最简单的方法) new Date(new Date(new Date().toLocaleDateString()).getTime()+24*60*60* ...
- [ASP.NET]更简单的方法:FormsAuthentication登录ReturnUrl使用绝对路径
转自:http://www.cnblogs.com/dudu/p/formsauthentication-returnurl-absoluteuri.html [ASP.NET]更简单的方法:Form ...
随机推荐
- C#+EntityFramework编程方式详细之Code First 数据迁移
在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式, ...
- 此主机支持Intel VT-x,但Intel VT-x处于禁用状态
原因:未开启虚拟化技术 解决方法:https://www.cnblogs.com/jiefu/p/10711955.html
- linux软件管理
People who cannot find time for recreation are obliged sooner or later to find time for illness.腾不出时 ...
- IE9以及以下不支持jquery ajax跨域问题
1.代码中加 jQuery.support.cors = true; 2. 设置ie浏览器 工具->Internet 选项->安全->自定义级别” 将“其他”选项中的“通过域访问数据 ...
- Redis docker安装和主要功能
docker安装redis 启动docker,下载redis镜像:docker pull redis 然后运行镜像并发布端口6379: 然后运行redis-cli(这是Redis的一个命令行管理工具) ...
- [转] 微信小程序页面间通信的5种方式
微信小程序页面间通的5种方式 PageModel(页面模型)对小程序而言是很重要的一个概念,从app.json中也可以看到,小程序就是由一个个页面组成的. 如上图,这是一个常见结构的小程序:首页是一个 ...
- numpy array分割-【老鱼学numpy】
有合并,就有分割. 本节主要讲述如何通过numpy对数组进行横向/纵向分割. 横向/纵向分割数组 首先创建一个6行4列的数组,然后我们对此数组按照横向进行切割,分成3块,这样每块应该有2行,见例子: ...
- Django搭建博客文章---模型层
页面展示所需字段 1.文章标题---文本类型 2.文章摘要---文本类型 3.文章内容--文本类型 4.唯一的ID标记---int数字类型(自增.主键) 5.发布日期--日期类型 模型层定义字段 1. ...
- 4.基于梯度的攻击——MIM
MIM攻击原论文地址——https://arxiv.org/pdf/1710.06081.pdf 1.MIM攻击的原理 MIM攻击全称是 Momentum Iterative Method,其实这也是 ...
- day26 面向对象 单例模式总结
如果是在python2中,就需要手动继承object, 基于__new__方法 基于__new__方法 class Foo(object): def __new__(cls,*args,**kwarg ...