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. Web中的监听器【Listener】

    Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及 ...

  2. lintcode :Partition List 链表划分

    题目: 链表划分 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2-& ...

  3. HTML5入门5---HTML5控件元素

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Generic repository pattern and Unit of work with Entity framework

    原文 Generic repository pattern and Unit of work with Entity framework Repository pattern is an abstra ...

  5. Intellij IDEA新建一个EJB工程(二)

    从博文:http://www.cnblogs.com/yangyquin/p/5328344.html 中可以知道如何利用Intellij IDEA建立一个EJB Module,还有新建一个测试Mod ...

  6. android移植

    root@phone-desktop:/opt/4418-source/android4.4.2_r1# ./device/nexell/tools/build.sh -b drone2 -t u-b ...

  7. oracle lsnrctl status|start|stop

    [oracle@redhat4 ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 06-OCT-2015 ...

  8. Kaleidoscope for mac

    mac下的对比工具Kaleidoscope,是一款不错的对比工具,界面被广大用户所喜爱. window下使用beyond compare 3,具体设置步骤,请见:http://www.cnblogs. ...

  9. 1128. Partition into Groups(图着色bfs)

    1128 写的dfs貌似不太对 bfs重写 用bfs将图进行黑白染色 如果有超过一个与自己颜色相同的点 就把该点存入栈中 最后处理栈中的点 判断此点是否合法 不合法 取反 取反后再判断相邻点是否合法 ...

  10. Jqgrid入门-结合Struts2+json实现数据展示(五)

    DEMO用的是ssh框架实现的,具体怎么搭建的就不多做说明了.分页表格的数据操作难点就是数据展现.至于增删改直接用hibernate原生的方法实现即可.         初步分析:表格要实现分页,那么 ...