Created
May 4, 2018 06:48
-
-
Save zhangkn/3e24418985f4895c41fd3a5fc0162bc4 to your computer and use it in GitHub Desktop.
GCD的队列可以分为2大类型:Concurrent\Serial
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//0、 GCD的队列可以分为2大类型 | |
// 1)并发队列(Concurrent Dispatch Queue) | |
可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务);并发功能只有在异步(dispatch_async)函数下才有效 | |
// 2)串行队列(Serial Dispatch Queue) | |
让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务) | |
//1、 容易混淆的术语:有4个术语比较容易混淆:同步、异步、并发、串行 | |
//1) 同步和异步主要影响:能不能开启新的线程 | |
同步:在当前线程中执行任务,不具备开启新线程的能力 | |
异步:在新的线程中执行任务,具备开启新线程的能力 | |
//2) 并发和串行主要影响:任务的执行方式 | |
并发:多个任务并发(同时)执行 | |
串行:一个任务执行完毕后,再执行下一个任务 | |
//一、 并发队列 | |
// GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建 | |
// 1)使用dispatch_get_global_queue函数获得全局的并发队列 | |
dispatch_queue_t dispatch_get_global_queue( | |
dispatch_queue_priority_t priority, // 队列的优先级 | |
unsigned long flags); // 此参数暂时无用,用0即可 | |
// 例子: | |
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 获得全局并发队列 | |
// 2)全局并发队列的优先级 | |
#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高 | |
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中) | |
#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低 | |
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台 | |
// 二、串行队列 | |
//1) GCD中获得串行有2种途径 | |
//1)) 使用dispatch_queue_create函数创建串行队列 | |
dispatch_queue_t | |
dispatch_queue_create(const char *label, // 队列名称 | |
dispatch_queue_attr_t attr); // 队列属性,一般用NULL即可 | |
dispatch_queue_t queue = dispatch_queue_create("cn.itcast.queue", NULL); // 创建 | |
dispatch_release(queue); // 非ARC需要释放手动创建的队列 | |
//2)) 使用主队列(跟主线程相关联的队列) | |
主队列是GCD自带的一种特殊的串行队列 | |
放在主队列中的任务,都会放到主线程中执行 | |
使用dispatch_get_main_queue()获得主队列 | |
dispatch_queue_t queue = dispatch_get_main_queue(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment