iOS中所支持的多线程编程方法有三种:NSThread、NSOperation&NSoperationQueue、GCD,其中GCD是苹果官方所推荐使用的。数据库
GCD全称Grand Central Dispatch(队列调度),是一套底层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD相似NSOperationQueue,都是容许程序将任务切分为多个单一任务,而后提交至工程队列来并发地(串行)执行。
编程
GCD是C语言的实现,比NSoperationQueue更底层、更高效,而且它不是Cocoa框架的组成部分,并发任务会想NSoperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务,GCD的API很大程度上基于block。
多线程
GCD的三种队列任务
并发
1.主线程队列
框架
主线程队列, 内部执行任务是串行的同步操做。async
主线程队列不须要咱们建立,经过dispatch_get_main_queue()方法得到spa
dispatch_queue_t queue = dispatch_get_main_queue();线程
dispatch_async(queue, ^{调试
[self taskThread1];orm
});
或者
dispatch_async(dispatch_get_main_queue(), ^{
[self taskThread2];
});
2.建立私有队列 用户队列/串行队列
使用C接口,建立一个私有队列,队列名是一个C字符串,没有特别的要求,官方建议用倒装的标示符来表示(多用于调试)
私有队列内部也是串行操做
dispatch_queue_t queue = dispatch_queue_create("com.qianfeng", NULL);
dispatch_async(queue, ^{
[self taskThread2];
});
// 咱们本身建立的队列,非ARC下,咱们须要本身销毁
//dispatch_release(queue);
3.全局队列
全局队列是并行队列,不须要手动建立,能够经过dispatch_get_global_queue()方法得到
// 第一个参数是选取按个全局队列,通常采用DEFAULT,默认优先级队列
// 第二个参数是保留标志,目前的版本没有任何用处(不表明之后版本),直接设置为0就能够了
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
在全局队列里增长占用时间很长的block时,例如数据下载,文件操做,数据库操做等。须要在主队列中刷新UI(任何状况下刷新UI,务必在主线程中进行)