NSOperation 和 GCD 的关系
- GCD 是面向底层的 C 语言的 API
- NSOperation 是封装后的 GCD ,是 GCD 的高级抽象
它们的区别
- GCD 的执行效率更高
- GCD 只支持 FIFO,但是
NSOperation可以设置最大线程并发数、设置任务优先级、添加任务依赖关系,从而调整执行顺序。NSOperation 甚至可以跨队列设置依赖关系。 - NSOperation 可以通过 KVO 技术,来检测一个 operation 是否正在运行、结束或者取消maxConcurrentDownloads
适用场景:
- 简单的异步操作用 GCD,优先考虑 GCD
- 如果任务需要更细致的执行顺序、依赖关系或者设置最大线程并发数,又或者是想暂停、取消恢复任务,那就要用 NSOperation,比如 SDWebimage 中的网络请求
每个
UIImageView都只有一个operation,如果之前的operation已经在下载,则取消这个 operation,也就是取消下载。除了取消,还有监听的操作
下载图片的队列也会设置
maxConcurrentDownloads(并发下载的最大数量)