35 如何在Swift中创建一个线程

简介: 如何在Swift中创建一个线程

如何在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?)

image.png

初始化器

  • Thread(target:, selector:, object:)

image.png

importUIKitimportPlaygroundSupport//不希望在执行完主线程的代码后就退出PlaygroundPage.current.needsIndefiniteExecution=true

更高级的抽象:CocoaOperation

概述

  • 面向对象
  • Operation + OperationQueue
  • 取消,依赖,任务优先级,复杂逻辑,保存业务状态,子类化

Operation

  • Operation
  • BlockOperation

主要状态

  • isReady : 是不是准备好了
  • isExecuting : 是不是在执行
  • isFinished : 是不是已经完成了
  • isCancelled : 是不是取消了

运行方式

  • sync
  • main()
  • async
  • start()
  • isAsynchronous : 是否异步的
  • isExecuting
  • isFinished

image.png

OperationQueue

  • OperationQueue队列里可以加入很多个Operation,可以把OperationQueue看做一个线程池,可往线程池中添加操作(Operation)到队列中
  • 底层使用GCD
  • maxConcurrentOperationCount可以设置最大并发数
  • defaultMaxConcurrentOperationCount根据当前系统条件动态确定的最大并发数
  • 可以取消所有Operation,但是当前正在执行的不会取消
  • 所有Operation执行完毕后退出销毁

BlockOperation

image.png

继承Operation

image.png

Operation完成回调

  • completionBlock

image.png







目录
相关文章
|
8月前
|
Swift 索引
18 在Swift中创建一个数组
在Swift中创建一个数组
301 0
|
19天前
|
IDE 开发工具 Swift
创建一个Swift项目
创建一个Swift项目
40 1
|
8月前
|
Swift iOS开发
23 Swift中如何定义和使用函数
Swift中如何定义和使用函数
56 0
|
Swift
Swift - 如何判断一个对象是否是某个类
Swift - 如何判断一个对象是否是某个类
78 0
|
前端开发 Swift
Swift实用小册10:实例方法和类型方法的使用
Swift实用小册10:实例方法和类型方法的使用
188 0
Swift实用小册10:实例方法和类型方法的使用
|
安全 Swift
Swift5.1—无主引用
Swift5.1—无主引用
152 0
Swift5.1—无主引用
|
存储 安全 编译器
Swift-进阶 02:类、对象、属性
Swift-进阶 02:类、对象、属性
290 0
Swift-进阶 02:类、对象、属性
|
API 网络性能优化 Go
[译] Swift 中关于并发的一切:第一部分 — 当前
本文讲的是[译] Swift 中关于并发的一切:第一部分 — 当前,在 Swift 语言的当前版本中,并没有像其他现代语言如 Go 或 Rust 一样,包含任何原生的并发功能。
1187 0