iOS多线程之GCD小记
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就是帮你封装好了多线程的操作
一个列队相当于一个线程,在列队里面的任务都是按照先进先出的顺序来执行的
暂时就只有这么粗浅的理解,时间充足的话,还是要实际编写一下代码,这样可以理解的更加深入。
iOS多线程之GCD小记的更多相关文章
- iOS 多线程之GCD的使用
在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...
- iOS多线程之GCD详解
GCD(Grand Central Dispatch)是基于C语言开发的一套多线程开发机制.也是目前苹果官方推荐的多线程开发方法.iOS三种多线程开发中GCD是抽象层次最高的.当然用起来也是最简单的. ...
- iOS多线程之GCD学习笔记
什么是GCD 1.全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2.纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 G ...
- (五十五)iOS多线程之GCD
GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个 ...
- iOS 多线程之GCD的简单使用
在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...
- ios多线程之GCD
介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首 ...
- iOS多线程之GCD、OperationQueue 对比和实践记录
[toc] 简介 在计算的早期,计算机可以执行的最大工作量是由 CPU 的时钟速度决定的.但是随着技术的进步和处理器设计的紧凑化,热量和其他物理约束开始限制处理器的最大时钟速度.因此,芯片制 ...
- IOS 多线程之GCD
参考:http://www.cnblogs.com/wendingding/p/3806821.html <<Objective-C基础教程>> 第二版 一 简介 GCD 全称 ...
- iOS多线程之8.NSOPeration的其他用法
本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...
随机推荐
- 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序
前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...
- lintcode :Binary Tree Preorder Traversal 二叉树的前序遍历
题目: 二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. 挑战 你能使用非递归实现么? 解题: 通过递 ...
- eclipse中clean操作中如何将validating除去
eclipse中去掉js validating方法:1. 删除.project文件中的 <buildSpec></buildSpec>中的:<buildCommand&g ...
- iOS使用Charts框架绘制—柱形图
首先看一下最终要实现的效果: 最终效果 一.初始化barChartView 绘制柱形图需要用到BarChartView这个类,下面是初始化代码: self.barChartView = [[BarCh ...
- 利用纯真ip地址库 查询 ip所属地
1. 首先下周数据源,选择是纯真数据库:http://www.cz88.net/ 2. 安装后,打开软件,将数据导出为txt格式. 3. 处理数据,参照网上的文章(http://www.jb51.ne ...
- JNI读取assets资源文件
源自:http://www.rosoo.net/a/201112/15459.html assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取 ...
- oracle lsnrctl status|start|stop
[oracle@redhat4 ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 06-OCT-2015 ...
- IP地址分类及私网IP
5类IP地址: IP地址共有32位字节,其中A~C类IP地址由类标识号.网络地址和主机地址组成,A类标识最高位为0,网络地址为1字节,主机地址为3字节, B类标识最高位为10,网络地址为2字节,主机地 ...
- CSS在不同浏览器兼容问题,margin偏移/offset溢出等
margin在垂直取值时取最大值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- sdut 2846 Remove Trees (二分 + 贪心)
题目 和poj 上的一道题几乎一样. 题意:已知n棵树距第一棵树的距离,求删掉m棵树后的 树之间 的最小距离 的最大值. 思路:二分枚举最小的距离,注意二分的写法. #include <ios ...