iOS多线程之GCD小记

iOS多线程方案简介

从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中:
1、Pthreads
这是一套可以在很多操作系统上通用的多线程API,是基于C语言的,在在oc中使用时需要包含
#import<pthread.h>
使用这种多线程方案需要手动处理线程的各个状态的转换,也就是要管理线程的生命周期。
2、NSThread
这种多线程方案经过了苹果的封装,是一种面向对象的方案,因此可以直接操控线程对象,相对来说比较便捷,其生命周期也要手动管理
3、GCD
全称Grand Central Dispatch,是苹果开发的一套多线程解决方案。
4、NSOperation & NSOperationQueue
NSOperation是苹果对GCD的进一步封装,完全面向对象
好的,大体介绍了这几种多线程方案后,我们正式选择走进GCD。

GCD

GCD提供了一套全新的API共用户使用,它可以将应用需要执行的工作拆分为可分散在多个线程和多个CPU上的更小的块。它可以自动管理线程生命周期(线程创建、任务调度、线程销毁)。用户只需将要执行的任务告诉GCD就行了。GCD使用的也是C语言。它可以使用程序块(Block)进行访问。
GCD中有两个概念:任务和队列
任务就是操作,就是用户想要做的事情,可以用一段代码来表示。任务执行方式分为同步和异步。
队列用于存放任务,队列分为串行队列和并行队列两种。
创建队列
在所有的任务队列中,有一个主队列,它负责UI的刷新,任何耗时的任务都不应该放在主队列中。创建主队列的代码如下:

dispatch_queue_t queue = ispatch_get_main_queue();

创建串行队列

 dispatch_queue_t queue = dispatch_queue_create("testQueue1", DISPATCH_QUEUE_SERIAL);dispatch_queue_t queue = dispatch_queue_create("testQueue2", NULL);

第一个参数是队列的标识符,用来唯一识别队列。第二个参数说明队列的性质是串行还是并行。
创建并行队列

  dispatch_queue_t queue = dispatch_queue_create("testQueue3", DISPATCH_QUEUE_CONCURRENT);

全局并行队列
这个队列是系统提供的,其获取方式如下

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

第一个参数表示队列的优先级,第二个参数暂时未使用,设置为0

创建任务
任务分为同步任务和异步任务
创建同步任务

  dispatch_sync(<testQueue3>, ^{//程序块,即要执行的具体任务//GCD获取这里的整个程序块,然后将它传递给一个后台线程,//程序块将在这里一次执行异步,就像在主线中一样});

第一个参数传入队列名,即要把新创建的任务加入到哪个队列中,第二个参数是一个程序块
创建异步任务

  dispatch_async(<testQueue3>, ^{//程序块,即要执行的任务});

从其他线程返回主线程

dispatch_async(dispatch_get_main_queue(), ^{});

总结

事实上,GCD就是帮你封装好了多线程的操作
一个列队相当于一个线程,在列队里面的任务都是按照先进先出的顺序来执行的
暂时就只有这么粗浅的理解,时间充足的话,还是要实际编写一下代码,这样可以理解的更加深入。

部分代码参考:http://www.jianshu.com/p/0b0d9b1f1f19

转载于:https://www.cnblogs.com/scut-linmaojiang/p/5288409.html

iOS多线程之GCD小记相关推荐

  1. (五十五)iOS多线程之GCD

    GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个 ...

  2. IOS中的多线程之GCD

    在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central D ...

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

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

  4. IOS多线程之Block编程

    1 什么是block iOS SDK 4.0開始,Apple引入了block这一特性.字面上说,block就是一个代码块.可是它的奇妙之处在于在内联(inline)运行的时候(这和C++非常像)还能够 ...

  5. iOS多线程之7.NSOperation的初识

    NSOperation和GCD一样,不用我们管理线程的生命周期,加锁等问题,只要把操作封装进NSOperation中,系统会自动帮我们创建线程,执行操作.而且他是面向对象的,我们看起来更容易理解,使用 ...

  6. (五十六)iOS多线程之NSOperation

    NSOpertation是一套OC的API,是对GCD进行的Cocoa抽象. NSOperation有两种不同类型的队列,主队列和自定义队列. 主队列运行于主线程上,自定义队列在后台运行. [NSBl ...

  7. 关于多线程之GCD的一些学习要点

    GCD是当前多线程使用最方便的,也是使用比较多的. 学习GCD主要集中在一下几点: 一.队列,同步,异步 1.主队列:dispatch_get_main_queue(); 2.串行队列:dispatc ...

  8. ios多线程之NSThread头文件详解

    1.NSThread 头文件中的相关方法 //获取当前线程+(NSThread *)currentThread; //创建线程后自动启动线程 + (void)detachNewThreadSelect ...

  9. linux 线程pthread_detach,linux线程之pthread_join和pthread_detach

    在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在 被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反 ...

最新文章

  1. [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子
  2. “他们”最想要的圣诞礼物是你的...
  3. 8s nfs 挂载文件_把你的树莓派家庭实验室变成一个网络文件系统 | Linux 中国
  4. springboot2整合mysql5_SpringBoot2.X (二十五):SpringBoot整合 Mybatis + MySQL CURD 示例
  5. 图片夹_电竞游戏鼠标好伴侣,鼠标线夹,让你桌面不凌乱
  6. Python中出现“TabError: inconsistent use of tabs and spaces in indentation”
  7. 潭州课堂25班:Ph201805201 爬虫基础 第六课 选择器 (课堂笔记)
  8. 2021-2025年中国专业灯具行业市场供需与战略研究报告
  9. CUDA学习(九十七)
  10. BZOJ 2763 飞行线路
  11. JAVA退房计算价格怎么写,JAVA宾馆客房管理系统报告.doc
  12. html表单中文字前黑点怎么弄,如何将word文档中标题前的黑点去掉
  13. 先有鸡还是先有蛋?应用程序开发与安全
  14. 基于SSM梵杰妮纺织品公司订单管理系统
  15. GB28181 协议实现H5无插件RTMP/HTTP-FLV/HLS直播监控方案 - sfxlab
  16. 系统集成项目管理工程师(软考中级)—— 第十七章 项目沟通和干系人管理 笔记分享
  17. https证书的验证过程与生成方法
  18. 阿里云服务器安装mysql8
  19. 2018年五一小长假全国旅游大数据报告出炉,这些景点太火爆!
  20. SQL批量快速替换文章标题关键词的方法语法 快速批量替换某个词技巧

热门文章

  1. Android的HTTP方式网络通信---HttpURLConnection
  2. ExtJs十一(ExtJs Mvc图片管理之一)
  3. 关于WinCE6.0补丁包的一点说明
  4. MovieClip实现拖拽等移动位置的功能
  5. python管理数据库的库_Python中管理数据库
  6. python考勤记录_python连接中控考勤机分析数据
  7. php能干哪些副业,做副业,在能干的基础上踏实肯干
  8. 如何将unity3d动画嵌入html,在Unity3D中使用精灵动画引擎制作动画的两种方法
  9. Java 蓝桥杯 龟兔赛跑预测
  10. java中常见数据库字段类型与java.sql.Types的对应