Swift_3.0 【Swift 3.0 中 GCD 的改变】

Swift_3.0 【Swift 3.0 中 GCD 的改变】,第1张

概述DispatchQueue 首先,dispatch 的全局函数不再写为下划线风格的名称了,它变成了一个更符合 Swift 风格的 DispatchQueue 的样子。 main thread 同样的,你不需要在去用 dispatch_get_main_queue ( ) 来获取主线程,而是 DispatchQueue .main,那么要放到主线程的代码怎么执行呢?只需要在线程后边使用 .async dispatchQueue


@H_404_4@

首先,dispatch 的全局函数不再写为下划线风格的名称了,它变成了一个更符合 Swift 风格的 dispatchQueue 的样子。@H_404_4@
main thread


@H_404_4@

同样的,你不需要在去用 dispatch_get_main_queue ( ) 来获取主线程,而是 dispatchQueue .main,那么要放到主线程的代码怎么执行呢?只需要在线程后边使用 .async{ } 即可,也就是说,大概是这样: @H_404_4@

dispatchQueue.main.async {  print(Thread.current)}

优先级


@H_404_4@

说完了最基本的东西,我们再来说说其他改变了的东西,比如优先级的名字。@H_404_4@

我们知道,GCD 的默认队列优先级有四个:@H_404_4@ disPATCH_QUEUE_PRIORITY_HIGH disPATCH_QUEUE_PRIORITY_DEFAulT disPATCH_QUEUE_PRIORITY_LOW disPATCH_QUEUE_PRIORITY_BACKGROUND

现在,新的语法当中,改变了这四个不明不白的优先级名称为更有意义的名字:@H_404_4@ .userInitialted .default .utility .background

当然,它们的对应关系也就是与顺序相同的:@H_404_4@

 disPATCH_QUEUE_PRIORITY_HIGH:.userInitiated disPATCH_QUEUE_PRIORITY_DEFAulT: .default disPATCH_QUEUE_PRIORITY_LOW: .utility disPATCH_QUEUE_PRIORITY_BACKGROUND:.background

获取一个队列


@H_404_4@

我们使用 dispatchQueue.global ( ) 获取一个系统的队列(系统自带的全局并发队列),这样的话获取的就是默认 .default优先级的队列了,如果要获取其他优先级的队列,就使用dispatchQueue.global(qos: .userInitiated),最后,我们使用 . async{} 来执行代码: @H_404_4@

dispatchQueue.global(qos: .userInitiated).async { print(Thread.current)}

创建一个队列


@H_404_4@

直接用 dispatchQueue 的初始化器来创建一个队列。最简单直接的办法是这样:@H_404_4@

let queue = dispatchQueue(label: "myBackgroundQueue")


@H_404_4@

复杂一点?你可以指定优先级以及队列类别:@H_404_4@

let queue = dispatchQueue(label: "myBackgroundQueue",qos: .userInitiated,attributes: .concurrent)


@H_404_4@

然后把代码放进去即可:@H_404_4@

queue.async {print("aaa")}

队列组


@H_404_4@

对于组,现在你可以使用这样的语法直接创建一个组:@H_404_4@

let group = dispatchGroup()


@H_404_4@

至于使用,则是这样的:@H_404_4@

let group = dispatchGroup()let queue = dispatchQueue(label: "myBackgroundQueue")queue.async(group:group) {print("background working")}


@H_404_4@

那么,如果有多个并发队列在同一个组里,我们需要它们完成了再继续呢?@H_404_4@

group.wait()

指定时间后执行


@H_404_4@

很多时候你可能还需要让一些代码在指定的时间后执行,比如动画完成后。这个任务在swift 2.3 很麻烦,不过,在3.0就不一样了:@H_404_4@

dispatchQueue.main.asyncAfter(deadline: dispatchTime.Now() + 3.0) {print("after!")}
总结

以上是内存溢出为你收集整理的Swift_3.0 【Swift 3.0 中 GCD 的改变】全部内容,希望文章能够帮你解决Swift_3.0 【Swift 3.0 中 GCD 的改变】所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1071489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存