版权声明:本文为博主原创文章。未经博主同意不得转载。 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的简单使用方法的更多相关文章

  1. iOS 线程之GCD的高级使用方法

    之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及样例说明,今天因为项目中有特殊的应用GCD的实例,为大家介绍两种特殊需求的使用GCD的方法. 目的:实现一件事情做完,再做下一件事情. ...

  2. MySQL笔记-最简单的方法来解决找不到mysqld.sock文件的问题

    首先,环境:ubuntu 14.04,采用apt-get的方式安装的,手动安装可能路径设置稍有区别. 1.安装MySQL后,用命令行首次启动时发现找不到Mysqld.sock文件,提示: ERROR ...

  3. mfc显示静态图片最简单的方法

    一致都是研究如何调用opencv显示动态图片,但是很多时候在显示图标的时候,都是需要显示静态图片,现在将最简单的方法总结下: 1.添加picture控件 2.添加资源,要求为bmp 3.修改属性 结果 ...

  4. ECshop设置301最快捷最简单的方法

    ECshop设置301最快捷最简单的方法 在 init.php中加入以下代码 if (strtolower($_SERVER['SERVER_NAME'])!='www.fz1688.com') { ...

  5. git 的简单使用方法

    git 的简单使用方法1. 服务器 安装完成2. ssh 中的账号创建完成3. 创建 ssh 账号,会在 ssh 的安装目录下的home 目录里面,多了用户家目录4. 进入该目录 ,创建一个新的文件夹 ...

  6. JavaScript,一个超级简单的方法判断浏览器的内核前缀

    先说明,此处的方法是说超级简单的方法,不是指代码超级少,而是用非常简单的知识点,只要懂得怎么写JavaScript的行内样式就可以判断. 大家应该还记得JavaScript行内样式怎么写吧?(看来我是 ...

  7. NET MVC1项目升级到MVC2最简单的方法

    NET MVC1项目升级到MVC2最简单的方法 把MVC1项目升级到MVC2,最简单的做法如下: 新建MVC2项目 新建一个MVC2项目,把原来MVC1的项目文件全部拷贝到新建MVC2项目目录里,依照 ...

  8. js 获取当天23点59分59秒 时间戳 (最简单的方法)

    js 获取当天23点59分59秒 时间戳 (最简单的方法) new Date(new Date(new Date().toLocaleDateString()).getTime()+24*60*60* ...

  9. [ASP.NET]更简单的方法:FormsAuthentication登录ReturnUrl使用绝对路径

    转自:http://www.cnblogs.com/dudu/p/formsauthentication-returnurl-absoluteuri.html [ASP.NET]更简单的方法:Form ...

随机推荐

  1. svn"database disk image is malformed"错误解决

    本文是svn出现类似如下问题的两种解决方案. svn: E200030: database disk image is malformed 一.最简单的方法,复制其它人的.svn/wc.db替换. 二 ...

  2. java学习 之 java基本数据类型

    java 8个基本数据类型 public class BasicDataType { public static void main(String args[]) { //数据类型 //Byte Sy ...

  3. 基于netty的socket服务端触发了channelInactive方法,但实际连接没有断开的问题

    背景: 一个中小型H5游戏,后端使用基于 netty 的socket服务 服务端 分为 分发服务器 & 业务服务器,业务服务器可负载 用户客户端与分发服务器连接 分发服务器再作为客户端与每台业 ...

  4. Knockout案例: 全选

  5. js分析 天_眼_查 字体文件

    0. 参考 js分析 猫_眼_电_影 字体文件 @font-face 1. 分析 1.1 定位目标元素 1.2 查看网页源代码 1.3 requests 请求提取得到大量错误信息 对比猫_眼_电_影抓 ...

  6. Redis数据结构之skiplist

    本文及后续文章,Redis版本均是v3.2.8 我们会经常选择使用sorted set数据结构,是由于其提供的操作非常丰富,可以满足非常多的应用场景.sorted set数据结构是由skiplist( ...

  7. 【js】正则

    复习字符串操作search 查找substring 获取子字符串charAt 获取某个字符split 分割字符串,获得数组 <script> var str="abcdef&qu ...

  8. (三)ajax请求不同源之服务器代理跨域

    一.基本原理 Server Proxy,顾名思义,在服务器端设置一个代理,由服务器端向跨域的网站发出请求,再将请求结果返回给前端,成功避免同源策略的限制. 二.客户端和服务端代码 1.在localho ...

  9. jquery提示sucess

    这是学习笔记. 今天做东西的时候,想把体验做好,于是打算再ajax success字段中添加函数实现提示sucess. 用了jquery的fadeIn 跟fadeOut,再fadeIn的callbac ...

  10. 关于DTO的理解

    转自大神loveis715博文:http://www.cnblogs.com/loveis715/p/4379656.html 在一个web服务的实现中,我们常常需要访问数据库,并将从数据库中取得的数 ...