GCD的简单介绍
一)GCD 的使用方式
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
async表明运行方式
queue则是你把任务交给那个线程队列来处理
block代表的是你要做的事情
//线程运行方式
dispatch_async 异步执行
dispatch_sync 同步执行
dispatch_delay 延迟执行
...
二)处理任务对象 dispatch queue(线程队列)
一、dispatch_get_main_queue 主线程队列(UI线程队列)
二、dispatch_get_global_queue 并行线程队列,由系统创建三个不同优先级的dispatch queue。并行队列的执行顺序与其加入队列的顺序相同。
三、串行队列,一般用于按顺序同步访问,依次执行(顺序由代码先后觉得),可创建任意数量的串行队列,各个串行队列之间是并发的。
当想要任务按照某一个特定的顺序执行时,串行队列是很有用的。串行队列在同一个时间只执行一个任务。我们可以使用串行队列代替锁去保护共享的数据。和锁不同,一个串行队列可以保证任务在一个可预知的顺序下执行。
串行队列通过dispatch_queue_create创建,可以使用函数dispatch_retain和dispatch_release去增加或者减少引用计数。
//dispatch queue叫线程队列
dispatch_queue_create 用于创建用户线程队列。可以创建Serial/Concurrent Dispatch Queue 两种队列,即串行与并行队列。
一、创建Serial Dispatch Queue。
dispatch_queue_t serialQueue = dispatch_queue_create ( "com.SerialQueue" , NULL );
可以创建多个串行队列,串行队列也可以并行执行。决不能随意的大量生产Serial Dispatch Queue。
二、创建Concurrent Dispatch Queue
dispatch_queue_t concurrentQueue = dispatch_queue_create ( "com.ConcurrentQueue" ,
DISPATCH_QUEUE_CONCURRENT );
Concurrent Dispatch Queue不过创建多少都没有问题,因为Concurrent Dispatch Queue所使用的线程由系统的XNU内核高效管理,不会影响系统性能。
三) 只执行一次的线程 一般用来写单例模式
static dispatch_once_t onceToken;
dispatch_once (&onceToken, ^{
});
EG:
SubObject *subobject = nil ;
+ ( SubObject *)sharedRequest
static dispatch_once_t onceToken;
dispatch_once (&onceToken, ^{
subobject = [[ SubObject alloc ] init ];
return subobject
// 延迟2秒执行线程
double delayInSeconds = 2.0 ;
dispatch_time_t popTime = dispatch_time ( DISPATCH_TIME_NOW , delayInSeconds * NSEC_PER_SEC );
dispatch_after (popTime, dispatch_get_main_queue (), ^( void ){
// code to be executed on the main queue after delay
});
//线程汇总通知,等所有子线程(这个称呼不准确,先代替了)执行完成后,才执行notify线程
dispatch_group_t group = dispatch_group_create ();
dispatch_group_async (group, dispatch_get_global_queue ( 0 , 0 ), ^{
// 并行执行的线程一
for ( int i= 0 ; i< 10 ; i++) {
NSLog ( @"---------%i" ,i);
}
});
dispatch_group_async (group, dispatch_get_global_queue ( 0 , 0 ), ^{
// 并行执行的线程二
for ( int i= 10 ; i< 20 ; i++) {
NSLog ( @"+++++++++%i" ,i);
}
});
dispatch_group_notify (group, dispatch_get_global_queue ( 0 , 0 ), ^{
// 汇总结果
NSLog ( @"完成" );
});
GCD的简单介绍的更多相关文章
- AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)
AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...
- iOS多线程GCD的简单使用
在iOS开发中,苹果提供了三种多线程技术,分别是: (1)NSThread (2)NSOperation (3)GCD 简单介绍一下GCD的使用. GCD全称 Grand Central Dispat ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- iOS-iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
随机推荐
- JVM的回收实现
通过一系列的称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用 ...
- mysql死锁问题
形成死锁的条件 我们mysql用的存储引擎是innodb,从日志来看,innodb主动探知到死锁,并回滚了某一苦苦等待的事务. 问题来了,innodb是怎么探知死锁的? 直观方法是在两个事务相互等待时 ...
- SU Demos-02Filtering-06Sukfilter
本demo中数学原理纯粹不知道,看来以后需要抓紧时间补课了,只附图. 运行结果图如下:
- jquery.validate.js的remote用法
<script> $(function(){ $("#myform").validate( { rules: { name:{required:true,rangele ...
- BZOJ4296 : [PA2015]Mistrzostwa
先不断将度数小于D的点都删去,再找到剩下的图里最大的连通块即可. #include<cstdio> #include<algorithm> #define N 200010 i ...
- [转]C++设计模式:Builder模式
Builder模式要解决的问题是,当我们要创建很复杂的对象时,有时候需要将复杂对象的创建过程和这个对象的表示分离开来.由于在每一步的构造过程中可以映入不同参数,所以步骤相同但是最后的对象却不一样.也就 ...
- TYVJ P1023 奶牛的锻炼 Label:dp
背景 USACO 描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0).若她在第i分钟休息,则疲倦程度减少1.无论何时 ...
- /etc/named/named.conf.options中的Options参数
listen-on port 53 { any; }; 监听在这部主机系统上面的哪个网路介面.预设是监听在localhost,亦即只有本机可以对DNS 服务进行查询,那当然是很不合理啊!所以这里要将大 ...
- 相关css 细节处理 neat.css
人性化的细节处理 例如: textarea 默认只能垂直拖动,防止宽度改变破坏布局. textarea { resize: vertical; } 汉字字号小于 12px 不易阅读,为 <sma ...
- Sql Server 常用方法、存储过程备用
常用方法 --字符串转换成数字 --CAST("1" AS int) --CONVERT(int,"1") --截取字符串 SUBSTRING(OccurreA ...