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

iOS多线程之GCD小记的更多相关文章

  1. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  2. iOS多线程之GCD详解

    GCD(Grand Central Dispatch)是基于C语言开发的一套多线程开发机制.也是目前苹果官方推荐的多线程开发方法.iOS三种多线程开发中GCD是抽象层次最高的.当然用起来也是最简单的. ...

  3. iOS多线程之GCD学习笔记

    什么是GCD 1.全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2.纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 G ...

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

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

  5. iOS 多线程之GCD的简单使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  6. ios多线程之GCD

    介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首 ...

  7. iOS多线程之GCD、OperationQueue 对比和实践记录

    [toc] 简介      在计算的早期,计算机可以执行的最大工作量是由 CPU 的时钟速度决定的.但是随着技术的进步和处理器设计的紧凑化,热量和其他物理约束开始限制处理器的最大时钟速度.因此,芯片制 ...

  8. IOS 多线程之GCD

    参考:http://www.cnblogs.com/wendingding/p/3806821.html <<Objective-C基础教程>> 第二版 一 简介 GCD 全称 ...

  9. iOS多线程之8.NSOPeration的其他用法

      本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

随机推荐

  1. Java学习笔记(一) java介绍

    编程语言分为:编译型语言和解释型语言. 编译型语言需要经过特定编译器通过一次性编译,成为该特定平台硬件可执行的机器码,可脱离开发环境独立运行,运行效率较高,但是无法跨平台移植. 解释型语言需要经过特定 ...

  2. lintcode: 爬楼梯

    题目: 爬楼梯 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 样例 比如n=3,中不同的方法 返回 3 解题: 动态规划题目,同时还是有顺序 ...

  3. 【Linux高频命令专题(16)】less

    概述 less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向 ...

  4. TCL语言笔记:TCL练习二

    一.练习 1.二进制转十进制 proc b2d {b} { ;set len [string length $b] } {$i<$len} {incr i} { incr sum [expr , ...

  5. HTML5 文件API(二)

    1.FileSystem概述及浏览器检 2.申请磁盘配额 3.创建文件

  6. HDU-4661 Message Passing 树形DP,排列组合

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4661 题意:有n个人呈树状结构,每个人知道一个独特的消息.每次可以让一个人将他所知的所有消息告诉和他相 ...

  7. Vim 命令笔记

    给指定行添加序号 let la = 行a let lb = 行b +1 let lc = lb - la for i in range(lc) let cl = la + i call setline ...

  8. (step4.3.4)hdu 1258(Sum It Up——DFS)

    题目大意:输入t,n,接下来有n个数组成的一个序列.输出总和为t的子序列 解题思路:DFS 代码如下(有详细的注释): #include <iostream> #include <a ...

  9. hibernate--关联映射(一对多)

    在对象模型中,一对多的关联关系,使用集合来表示. 实例场景:班级对学生:Classes(班级)和Student(学生)之间是一对多的关系. 对象模型: 多对一.一对多的区别: 多对一关联映射:在多的一 ...

  10. Android Activity形象描述

    Activity就是形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的,如果不加任何控件的话,那么就像Windows中的空白窗体一样 通过 ...