Swift 多线程

主线程

1
2
3
DispatchQueue.main.async {
print("Main")
}

主线程延迟

1
2
3
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
print("1s")
}

多线程

GCDOperation 的区别:

  1. GCD 遵循先进先出顺序 FIFO, 是轻量级的方式来执行并发过程. 你不用计划这些任务的执行单元,系统会帮你处理执行时间表。添加依赖关系会很头疼。取消,挂起任务会增加很多工作量!
  2. Operation 不遵循先进先出顺序 FIFO,增加了更多的灵活度,也复杂一些。好处就是方便添加任务依赖关系,并且可以重用,取消,挂起任务。

global()

1
2
3
4
5
6
DispatchQueue.global().async {
// 一些比較花時間的操作
DispatchQueue.main.async {
// update UI
}
}

OperationQueue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 1 // 队列宽度为 1

let delay = BlockOperation.init {
sleep(3)
}

let doing = BlockOperation.init {
print("3s Later")
}

queue.addOperation(delay)
queue.addOperation(doing)
queue.cancelAllOperations() // 取消所有 operation

参考:

  1. Swift多线程操作GCD使用总结
  2. Operation和OperationQueue详解
  3. iOS - 多线程分析之 DispatchQueue Ⅰ
  4. GCD 神秘面紗揭開:讓你的 Swift 應用更強大

Swift 多线程
https://wonderhoi.com/2024/11/13/Swift-多线程/
作者
wonderhoi
发布于
2024年11月13日
许可协议