iOS多线程-Operation
前言 Hi Coder,我是 CoderStar! 我们之前已经讲过 iOS多线程-Thread 以及 iOS多线程-GCD,我们今天来聊一聊 iOS 多线程中最后一种比较常用的方式 –Operation。 概览 对于 Operation 而言,其相关的类比 GCD 要少的多。Operation 本身是一个 抽象类,不能直接进行使用,其定义了相关的方法及属性,需要靠子类进行相应的实现,系统已经实现了一个 –BlockOperation。(在 OC 中,还有一个是 NSInvocationOperation,但在 Swift 中,该子类已经在 Swift4 里去掉,想必去掉的原因大家也很容易理解,因为 Swift 语言本身就不推荐 selector 这种形式)。 Operation 底层建立在 GCD 之上,是更高一级的抽象,使我们可以面向对象(Cocoa 对象)的方式进行多线程编程。 其实 NSOpertion 是先于 GCD 引进的,在当时,NSOperationQueue 接收 NSOperation 对象并创建一个线程,然后在该线程上运行 main 方法 ,运行完成之后再杀死该线程。这种方式相对于后面出现的 GCD 底层的线程池而言,效率就很低,所以在 Mac OS 10.5 以及 iOS 2 开始便对 NSOpertion 底层在基于 GCD 的基础上进行完全重写,利用 GCD 的相关特性提高性能并提供了一些新功能。如果想简单佐证下,可以看到 OperationQueue 拥有一个 unowned(unsafe) open var underlyingQueue: DispatchQueue? 属性。 如果大家对 Operation 底层实现比较有兴趣,可以在开源的 Foundtion 框架中查看 Operation.swift。 ...