Dispatch Objects

尽管GCD是纯C语言的,但它被组建成面向对象的风格。GCD对象被称为dispatch object。Dispatch object像Cocoa对象一样是引用计数的。最新版本的XCode已经将dispatch objects加入到了ARC大家庭。

Dispatch Queues

GCD的基本概念就是dispatch queue。dispatch queue是一个队列对象,它可以接受任务,并将任务以先到先执行的顺序来执行。dispatch queue可以是并发的或串行的。并发任务会像NSOperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务。

GCD中三种队列类型:

  • The main queue: 与主线程功能相同。实际上,提交至main queue的任务会在主线 程中执行。main queue可以调用dispatch_get_main_queue()来获得。因为main queue是与主线程相关的,所以这是一个。

  • Global queues: 全局队列是,并由整个进程共享。进程中存在三个全局队 列:高、中(默认)、低三个优先级队列。可以调用dispatch_get_global_queue函 数传入优先级来访问队列。

  • 用户队列: 用户队列 (GCD并不这样称呼这种队列, 但是没有一个特定的名字来形容这 种队列,所以我们称其为用户队列) 是用函数 dispatch_queue_create 创建的队列. 这 些队列是在默认情况下的。正因为如此,它们可以用来完成同步机制, 有点像传统 线程中的mutex。

默认情况下,GCD公开有5个不同的队列:运行在主线程中的main queue,3个不同优先级 的后台队列,以及一个优先级更低的后台队列(用于I/O)。另外,开发者可以创建自定义队 列:串行或者并行队列。自定义队列非常强大,在自定义队列中被调度的所有block都将被 放入到系统的线程池的一个全局队列中。

提交任务

向一个队列提交任务很简单:调用dispatch_async函数或dispatch_sync。

  • Dispatch_async传入一个队列和一个block。队列会在轮到这个block执行时执行这个 block的代码。函数会立即返回, block会在后台异步执行;

  • Dispatch_sync的使用同dispatch_async,不同的是dispatch_sync会等待block执行 完成后再返回。

转载于:https://www.cnblogs.com/yybz/p/4043185.html

Dispatch简介相关推荐

  1. 手把手教您用虹科MatrikonOPC UA数据平台掌握您所有的UA服务器

    虹科FLEX Dispatch,整合了OPC UA数据聚合.仿真模拟.防火墙穿越等功能的强大工具,可以大大减少您对设备.数据的管理和运维成本! 实际意义 一般的OPC UA连接,需要在每个客户端和服务 ...

  2. ios代码大全】代码例子区全区搜索索引

    /************************ ************************    IOS 类代码 ************************/ 我自己做的翻书效果,小猫 ...

  3. 【很强大的ios代码大全】代码例子区全区搜索索引

    ************************    IOS 类代码 ************************/ 我自己做的翻书效果,小猫咪再次登场「2011/03/02」 如何实现QQLi ...

  4. GCD简介三:Dispatch Sources

    一.何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象.当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中 ...

  5. GCD简介一:基本概念和Dispatch Queue

    一.什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都 ...

  6. Dispatch 方法简介

    后台执行 dispatch_async(dispatch_get_global_queue(0, 0), ^{ //后台程执行 something; }); 主线程执行 dispatch_async( ...

  7. redux logic_Redux-Logic简介

    redux logic by Sam Ollason 通过萨姆·奥拉森(Sam Ollason) Redux-Logic简介 (An Introduction to Redux-Logic) This ...

  8. 详细解读Volley(二)—— ImageRequest Request简介

    上篇文章我们讲到了如何用volley进行简单的网络请求,我们可以很容易的接受到string.JsonObjec类型的返回结果,之前的例子仅仅是一次请求,这里需要说明volley本身就是适合高并发的,所 ...

  9. Py之Xlrd:Xlrd简介、安装、使用方法(读取xlsx文件的shee表头名/总行数/总列数、每一行的内容、指定列的内容)之详细攻略

    Py之Xlrd:Xlrd简介.安装.使用方法(读取xlsx文件的shee表头名/总行数/总列数.每一行的内容.指定列的内容)之详细攻略  导读      xlrd,xlwt和xlutils是用Pyth ...

  10. SWIG:SWIG的简介、安装、使用方法之详细攻略

    SWIG的简介.安装.使用方法之详细攻略 目录 SWIG的简介 SWIG的安装 SWIG的使用方法 SWIG的简介 SWIG是一种软件开发工具,它将C和C++编写的程序与各种高级编程语言连接起来.SW ...

最新文章

  1. python_day6.2
  2. SQL脚本:监控当前重做日志文件使用情况
  3. onRetainNonConfigurationInstance和getLastNonConfigurationInstance
  4. mysql不复制数据_windows mysql不停止服务复制数据
  5. 【渝粤教育】国家开放大学2018年秋季 0700-22T中级会计实务(一) 参考试题
  6. usb转232串口线驱动android,usb-rs232线驱动下载、Z-tek usb转串口驱动 usb转串口驱动...
  7. 最速下降法(附Python代码)
  8. x390开机键_【ThinkPadX390评测】ThinkPad X390 4G版全球首测:全时在线超长续航的便携商务利器(全文)_ThinkPad X390_笔记本评测-中关村在线...
  9. 最新PHP对接微信支付,发起商家转账API,商家转账到零钱
  10. 爱快路由器接水星交换机-划分vlan
  11. Latex实例[2]:跨页表格制作方法, longtable和 supertabular
  12. 获得联系人姓名、电话号码的方法
  13. usb usb1-port1: disabled by hub (EMI?), re-enabling
  14. 【Scratch考级99图】图10-等级考试scratch 画正五边形
  15. html贝塞尔曲线在线,使用canvas绘制贝塞尔曲线
  16. 给想学UG编程的人几点建议
  17. python 管道队列_Python多处理 – 管道与队列
  18. 材料科学计算机械类可以一起学吗,《材料科学与工程基础》习题和思考题及答案...
  19. zblog php1.51,zblogphp1.5.1 function文件夹文件详细说明
  20. 纵横布局,传统硬盘厂商的突围

热门文章

  1. Android Data Binding 初识
  2. python中append函数的用法
  3. 《俗人笔记》之《Java基础语法下》
  4. 网站流量的统计中的IP、PV、UV
  5. 从西直门立交桥谈IT架构与重构
  6. 西直门立交桥的破事儿
  7. 2021-03-19Windows取消禁止驱动签名的方法
  8. acwing 合唱队形
  9. Terminator the Sara Conner Chronicles
  10. [Erlang 0075] Bad value on output port 'tcp_inet'