一)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的简单介绍的更多相关文章

  1. AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)

    AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...

  2. iOS多线程GCD的简单使用

    在iOS开发中,苹果提供了三种多线程技术,分别是: (1)NSThread (2)NSOperation (3)GCD 简单介绍一下GCD的使用. GCD全称 Grand Central Dispat ...

  3. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  4. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  5. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  6. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  7. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  8. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  9. iOS-iOS开发简单介绍

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

随机推荐

  1. B 倒不了的塔

    Time Limit:1000MS  Memory Limit:65535K 题型: 编程题   语言: 无限制 描述 Dota是Defense of the Ancients的简称,是一个dhk和y ...

  2. css构造块级元素

    css 1. 宽高width:数值;height:数值;也可用百分比!长高的设置不会被后代继承2. 背景(1)背景颜色background-color:颜色值;元素的背景颜色默认为transparen ...

  3. 【转】CSS清除浮动_清除float浮动

    CSS清除浮动方法集合 一.浮动产生原因 一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 浮动产生样式效果截图 ...

  4. POJ 1523 (割点+连通分量)

    题目链接:http://poj.org/problem?id=1523 题目大意:连通图,找图中割点,并计算切除该割点后,图中的连通分量个数. 解题思路: POJ的数据很弱. Tarjan法求割点. ...

  5. Vijos 1180 (树形DP+背包)

    题目链接: https://vijos.org/p/1180 题目大意:选课.只有根课选了才能选子课,给定选课数m, 问最大学分多少. 解题思路: 树形背包.cost=1. 且有个虚根0,取这个虚根也 ...

  6. java中的日期转换

    在java中有两种Date对象,一种是java.sql.Date,另一种是java.util.Date 一.java.sql.Date对象: 这种Date对象使用了进行数据库操作的,它对应了数据库中的 ...

  7. Jexus & Mono 迁移

     具体案例: 问:  这个是现在微信公共平台的进三月请求数合计 如果迁移到 Mono & Jexus 需要注意那些?  因为微信需要的是5秒响应,服务号存在时段高峰值,在峰值上,一台服务器能否 ...

  8. WordPress折腾日记

    安装环境: 我开了个虚拟机xp....用xampp的整合包..下载地址https://www.apachefriends.org/zh_cn/download.html 跟着安装就行了.最后打开xam ...

  9. Qt 学习资料

    Qter开源社区http://www.qter.org/ [Qt教程], 作者yafeilinux [视频] QT学习之路:从入门到精通 <C++ Qt 编程视频教程>

  10. [译]- 6-1 排列窗体上的控件(Laying Out Widgets on a Form)

     排列窗体上的控件(Laying Out Widgets on a Form) 中英文对照:form(窗体),layout(布局或者排列,意思是进行窗体上控件的排列的过程,如大小位置等) absolu ...