GCD 与 NSOperation 的对比

KarMacartne 9年前

来自: http://my.oschina.net/TaciturnKnightYQ/blog/614507


  • GCD

    • 任务(block)添加到队列(串行/并发/主队列),并且指定任务执行的函数(同步/异步)

    • GCD是底层的C语言构成的API

    • iOS 4.0 推出的,针对多核处理器的并发技术

    • 在队列中执行的是由 block 构成的任务,这是一个轻量级的数据结构

    • 要停止已经加入 queue 的 block 需要写复杂的代码

    • 需要通过 Barrier 或者同步任务设置任务之间的依赖关系

    • 只能设置队列的优先级

    • 高级功能:

      • 一次性 once

      • 延迟操作 after

      • 调度组

       

  • NSOperation

    • 核心概念:把操作(异步)添加到队列(全局的并发队列)

    • OC 框架,更加面向对象,是对 GCD 的封装

    • iOS 2.0 推出的,苹果推出 GCD 之后,对 NSOperation 的底层全部重写

    • Operation作为一个对象,为我们提供了更多的选择

    • 可以随时取消已经设定要准备执行的任务,已经执行的除外

    • 可以跨队列设置操作的依赖关系

    • 可以设置队列中每一个操作的优先级

    • 高级功能:

      • 最大操作并发数(GCD不好做)

      • 继续/暂停/全部取消

      • 跨队列设置操作的依赖关系