[toc] ## 前言 对于多线程开发,苹果提供了多种编程方式: NSThread, GCD, NSOperation。 **它们之间的关系 :** - GCD的出现旨在替代NSThread, 它是基于 C 的底层的一套 API - NSOperation是基于 GCD 实现的 Objective-C 版本的API **多维度对比 :** | 类型 | 简介 | 实现语言 | 生命周期 |使用频率 | | ------ | ------ | ------ |------ |------ | | pthread | 1\. 一套通用的多线程API 2\. 适用于 Unix / Linux / Windows 等系统 3\. 跨平台\\可移植 4\. 使用难度大| C| 程序员管理|几乎不用 | | NSThread |1\. 使用更加面向对象 2\. 简单易用,可直接操作线程对象 |OC |程序员管理 |偶尔使用 | | GCD |1\. 旨在替代NSThread等线程技术 2\. 充分利用设备的多核 3\. 基于 C 的底层的 API |C |自动管理 |经常使用 | | NSOperation |1\. 是基于 GCD 实现的 Objective-C API 2\. 比GCD多了一些更简单实用的功能 3\. 使用更加面向对象|OC |自动管理 |经常使用 | 通过上面的对比,相信你对苹果多线程技术有了一些了解。本文接下来会介绍GCD多线程技术的相关知识 ## 认识 dispatch_queue_create ``` dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); ``` 可以看到创建队列的方法有两个参数可以传,默认的创建方式是这样的 ``` dispatch_queue_t queue = dispatch_queue_create("testQueue", NULL); ``` 后面的参数传入”NULL”就可以了,默认创建的是一个**串行队列**的。看看dispatch_queue_create这个方法的具体描述 >attr In OS X v10.7 and later or iOS 4.3 and later, specify DISPATCH_QUEUE_SERIAL (or NULL) to create a serial queue or specify DISPATCH_QUEUE_CONCURRENT to create a concurrent queue. In earlier versions, you must specify NULL for this parameter. attr在OS X v10.7后来或iOS 4.3及以后,指定**DISPATCH_QUEUE_SERIAL**(或零)创建一个**串行队列** 通过指定**DISPATCH_QUEUE_CONCURRENT**来创建创建一个**并发队列**。在早期版本中,您必须指定NULL为这个参数。 ``` // 创建串行队列 dispatch_queue_t queue = dispatch_queue_create("com.reyzhang.testQueue", DISPATCH_QUEUE_SERIAL); // 创建并发队列 dispatch_queue_t queueconcurrent = dispatch_queue_create("com.reyzhang.testQueue", DISPATCH_QUEUE_CONCURRENT); ``` 系统还有一个特殊的队列, **全局并发队列** ``` dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); ```