版权声明:本文为博主原创文章。未经博主同意不得转载。 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. 【java】字符串处理技巧记录

    字符串处理跟抖机灵似得... 1.统计字符串中含有子字符串的个数 例如"abcdefgabehab"中含有子字符串"ab"的个数为3. (str.length( ...

  2. cf55D 数位dp记忆化搜索+状态离散

    /* 漂亮数定义:可以整除任意数位上的数 求出区间[l,r]之间的漂亮数个数 因为 dp[i][j][k]:i位前模lcm的值是j,i位前lcm是k的漂亮数个数 */ #include<bits ...

  3. vs2010编译error_code

    C1083 : 现象: xxxxx.cpp clxx:fatal error C1083:无法打开源文件: “..\..\..\..\src\folder1\folder2\folder3\folde ...

  4. 设计模式学习之访问者模式(Visitor,行为型模式)(21)

    参考:https://www.cnblogs.com/edisonchou/p/7247990.html 在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根 ...

  5. numpy的索引-【老鱼学numpy】

    简单的索引值 import numpy as np a = np.arange(3, 15).reshape(3, 4) print("a=") print(a) print(&q ...

  6. 最近公共祖先(LCA)的三种求解方法

    转载来自:https://blog.andrewei.info/2015/10/08/e6-9c-80-e8-bf-91-e5-85-ac-e5-85-b1-e7-a5-96-e5-85-88lca- ...

  7. 操作mysql(import pymysql模块)

    pymysql模块 import pymysql #1.连上数据库.账号.密码.ip.端口号.数据库 #2.建立游标 #3.执行sql #4.获取结果 #5.关闭游标 #6.连接关闭 #charest ...

  8. angular.injector()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. [LeetCode] Serialize and Deserialize N-ary Tree N叉搜索树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  10. ICL2019E

    https://www.codechef.com/ICL2019/problems/ICL1906  两个整数,[0,1e5]操作1是让两个数同时减1(只有都大于0的时候才可以用)操作2可以让一个数乘 ...