iOS 下的多线程编程技术从底层往上分别是 NSThread、NSOperation、Grand Central Dispatch(GCD),这三个技术越往后抽象度越高,使用也越简单。GCD 无论在 Objective-C 时代,还是后 OC 的 Swift 时代,都是 iOS 开发者使用最多的多线程编程技术。
GCD 是使用 C 语言编写的。多年以来,一直使用 Objective-C 的开发者们很习惯 GCD 的底层 C 语言式的代码。这种风格一直保留到 Swift 推出两年后,到了 Swift 2 。无论 Swift 迭代了多少回,GCD 依然保留其原始的 C-Style。终于,到了 2016 年,全力研发 Swift 的苹果终于想起了 GCD 这么个东西,在 WWDC 2016 推出的 Swift 3 中完全更改了 GCD 的代码风格。
在 Swift < 3 中,我们写一个 GCD 代码可能是这样的:
let queue = dispatch_queue_create("Kenneth", nil)
dispatch_async(queue) {
print("Hello World")
}
我们创建一个串行队列,然后指派一个输出 Hello World 的异步任务给这个队列,一切看上去都很自然。然而唯一的缺点就是,这太不 Swift 了。
我们再看看 Swift 3 中,上面的代码是如何写的:
let queue = DispatchQueue(label: "Kenneth")
queue.async {
print("Hello World")
}
模版:
全局队列异步
DispatchQueue.global().async {
//Something that wastes time
DispatchQueue.main.async {
//返回主线程
}
}
延时操作,注意这里的单位是秒
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3.5) {
// 你想做啥
}
创建队列同步
let queue = DispatchQueue(label: "Kenneth")
queue.sync {
print("Hello World")
}