玩转iOS开发:iOS中的GCD开发(一)

文章分享至个人我的技术博客: https://cainluo.github.io/15018603425788.htmlhtml


GCD的介绍

GCDGrand Central Dispatch的缩写。git

Grand Central Dispatch (GCD)是苹果爸爸开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其余对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6雪豹中首次推出,也可在iOS 4及以上版本使用。程序员

为何要选择GCD

iOS开发中, 咱们都知道除了GCD还有NSThread, NSOperation & NSOperationQueue, 加上原本就是基于Unix系统的Pthreads, 这里就很少说了, 只讲GCD.github

  • GCD能够用在多核并行运算
  • GCD会自动利用更多的CPU内核, 不会有一核有难, 九核围观的状况.
  • GCD会自动管理线程的生命周期, 好比建立线程, 调度任务, 销毁线程等等操做.
  • 对咱们程序员而已, 就是GCD很是的简单, 只须要告诉它去执行什么任务就行了, 管理线程什么的都去死吧.

转载声明:如须要转载该文章, 请联系做者, 而且注明出处, 以及不能擅自修改本文.编程


GCD的任务和队列

这里要普及两个核心思想: 任务, 队列.微信

任务

所谓的任务, 就是指咱们程序员放在GCD里的操做, 通常是用Block方式进行, 这里有两种执行任务的操做, 同步执行异步执行, 两个的区别就是在是否开启新线程进行操做.app

同步执行:GCD里是sync, 不会开启新线程, 只会在当前线程进行操做. 异步执行:GCD里是async, 能够另外开启一个新的线程执行任务.异步

队列

队列指的是任务队列, 用来存听任务的队列, 能够说队列是一种比较特殊的线性表, 采用的是先进先出(FIFO)原则, 就像是出高速公路收费站同样, 从最前面一个开始, 排在前面的车子交了费先走, 才到下一个, 这里的队列分为两种, 并行队列串行队列.async

并行队列: 全名为Concurrent Dispatch Queue, 指的是可让多个任务同时执行, 若是用到并行队列的话, 是会自动开启多个线程同时执行任务. 串行队列: 全名Serial Dispatch Queue, 指的是任务一个接一个的执行, 完成了前面的那个就到后面那个, 和咱们刚刚举的收费站例子同样.优化

注意: 并行队列只有在异步执行(dispatch_async)才有效.


GCD的使用步骤

其实GCD的使用很是简单, 两步就完成了.

  • 建立队列, 并行, 串行都OK
  • 而后将任务放到队列中, 系统就会根据任务类型来进行异步, 或者是同步执行.

咱们先来看看队列, 任务的建立方法.

建立队列

  • 这里可使用dispatch_queue_create来建立对象, 这里须要传入两个参数.
    • 第一个参数: 队列的惟一标识符
    • 第二个参数: 队列的类型, DISPATCH_QUEUE_SERIAL表示串行队列, DISPATCH_QUEUE_CONCURRENT表示并行队列.
// 串行队列的建立方法
dispatch_queue_t queue= dispatch_queue_create("Test.queue", DISPATCH_QUEUE_SERIAL);

// 并行队列的建立方法
dispatch_queue_t queue= dispatch_queue_create("Test.queue", DISPATCH_QUEUE_CONCURRENT);
复制代码
  • 关于并行队列, 咱们还能够用dispatch_get_global_queue来建立全局并行队列, 也须要传入两个参数.
    • 第一个参数: 队列的优先级, 通常都是用DISPATCH_QUEUE_PRIORITY_DEFAULT.
    • 第二个参数: 暂时没用, 能够用0去代替.

建立任务

// 同步执行任务建立方法
dispatch_sync(queue, ^{
    // 这里听任务代码
});

// 异步执行任务建立方法
dispatch_async(queue, ^{
    // 这里听任务代码
});
复制代码

基本上这样子就算搞定了, 虽然咱们这里就只有两种队列, 但组合起来, 也是很多的:

  • 并行队列 + 同步执行
  • 并行队列 + 异步执行
  • 串行队列 + 同步执行
  • 串行队列 + 异步执行

再另外加上一种叫作主队列的特殊队列, 那就又多了两种组合:

  • 主队列 + 同步执行
  • 主队列 + 异步执行

这里咱们能够看一个表格, 更加的清晰知道各个组合的区别:

并行队列 串行队列 主队列
同步执行(sync) 不开启新线程, 串行方式执行任务 不开启新线程, 串行方式执行任务 不开启新线程, 串行方式执行任务
异步执行(async) 开启新线程, 并行方式执行任务 开启1条新线程, 串行方式执行任务 不开启新线程, 串行方式执行任务

总结

关于GCD的基本知识, 就讲到这里吧, 更详细的, 后续的文章再补上, 或者能够去看看GCD官方文档本身撸撸也ok~~


最后

码字很费脑, 看官赏点饭钱可好

微信

支付宝
相关文章
相关标签/搜索