iOS 面试题 | GCD 和 NSOperation 有啥区别?

203 阅读1分钟

image.png

NSOperation 和 GCD 的关系

  1. GCD 是面向底层的 C 语言的 API
  2. NSOperation 是封装后的 GCD ,是 GCD 的高级抽象

它们的区别

  1. GCD 的执行效率更高
  2. GCD 只支持 FIFO,但是 NSOperation 可以设置最大线程并发数、设置任务优先级、添加任务依赖关系,从而调整执行顺序。NSOperation 甚至可以跨队列设置依赖关系。
  3. NSOperation 可以通过 KVO 技术,来检测一个 operation 是否正在运行、结束或者取消maxConcurrentDownloads

适用场景:

  1. 简单的异步操作用 GCD,优先考虑 GCD
  2. 如果任务需要更细致的执行顺序、依赖关系或者设置最大线程并发数,又或者是想暂停、取消恢复任务,那就要用 NSOperation,比如 SDWebimage 中的网络请求

每个 UIImageView 都只有一个 operation,如果之前的 operation 已经在下载,则取消这个 operation,也就是取消下载。除了取消,还有监听的操作

下载图片的队列也会设置 maxConcurrentDownloads(并发下载的最大数量)


参考资料