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. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

    从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...

  2. lintcode:Valid Sudoku 判断数独是否合法

    题目: 判断数独是否合法 请判定一个数独是否有效.该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 样例 下列就是一个合法数独的样例. 注意 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...

  3. linux服务器下发送邮件

    系统管理人员经常会遇到对于设备或者任务的预警与通知,通常情况有发送短信.邮件等方式.发送短信一般来说需要有短信猫(硬件)或者调用libfetion给飞信用户发送.本文介绍几种简单的发送邮件的方式. 本 ...

  4. Java API —— 网络编程

    1.网络编程概述     1)网络编程概述     · 计算机网络         是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通 ...

  5. IOS地图及定位使用

    1.定位 定位使用CoreLocation库,引入CoreLocation/CoreLocation.创建CLLocationManager对象,使用startUpdatingLocation方法开始 ...

  6. 24-语言入门-24-cigarettes

    题目地址: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=94    描述Tom has many cigarettes. We hypoth ...

  7. Java中boolean型变量的默认值问题

    1.首先分析Java中的三种不同变量的区别,如下表所示   概念 默认值 其他 类变量 也叫静态变量,是类中独立于方法之外的变量 用static 修饰 有默认初始值,系统自动初始化. 如boolean ...

  8. Provider Pattern提供者模式和策略模式

    http://www.codeproject.com/Articles/18222/Provider-Pattern Introduction Provider pattern is one of t ...

  9. TCSRM 591 div2(1000)(dp)

    挺好的dp 因为有一点限制 必须任意去除一个数 总和就会小于另一个总和 换句话来说就是去除最小的满足 那么就都满足 所以是限制最小值的背包 刚开始从小到大定住最小值来背 TLE了一组数据 后来发现如果 ...

  10. open_table

    /* Open a table. SYNOPSIS open_table() thd Thread context. table_list Open first table in list. acti ...