如何在Swift中创建一个线程
写作前面
- 为什么几乎所有的GUI框架都是单线程的?
多线程可以做什么
- 网络请求
- IO
- 计算
- 数据模型转化
- ......
多线程编程的方式
- Thread
- Cocoa Operation (Operation和OperationQueue)
- Grand Central Dispath(GCD)
Thread
- Thread在三种多线程技术中是最轻量级的,但需要自己管理线程的生命周期和线程同步。线程同步对数据的加锁会有一定得系统开销
快捷方式创建
- detachNewThread(_ block: @escaping() -> Void)
- detachNewThreadSelector(_ selector: Selector, to Target target: Any, with argument: Any?)
初始化器
- Thread(target:, selector:, object:)
importUIKitimportPlaygroundSupport//不希望在执行完主线程的代码后就退出PlaygroundPage.current.needsIndefiniteExecution=true
更高级的抽象:CocoaOperation
概述
- 面向对象
- Operation + OperationQueue
- 取消,依赖,任务优先级,复杂逻辑,保存业务状态,子类化
Operation
- Operation
- BlockOperation
主要状态
- isReady : 是不是准备好了
- isExecuting : 是不是在执行
- isFinished : 是不是已经完成了
- isCancelled : 是不是取消了
运行方式
- sync
- main()
- async
- start()
- isAsynchronous : 是否异步的
- isExecuting
- isFinished
OperationQueue
- OperationQueue队列里可以加入很多个Operation,可以把OperationQueue看做一个线程池,可往线程池中添加操作(Operation)到队列中
- 底层使用GCD
- maxConcurrentOperationCount可以设置最大并发数
- defaultMaxConcurrentOperationCount根据当前系统条件动态确定的最大并发数
- 可以取消所有Operation,但是当前正在执行的不会取消
- 所有Operation执行完毕后退出销毁
BlockOperation
继承Operation
Operation完成回调
- completionBlock