在swift3中,GCD的语法已经全面修改,变得更加swift化了。
DispatchQueue
首先,dispatch的全局函数不再为下划线风格的名称了,它变成了更符合Swift风格的DispatchQueue的样子
main thread
同样的,你不在需要去用dispatch_get_main_queue()
来获取主线程,而是DispatchQueue.main
,那么要放到主线程的代码怎么执行呢?只需要在后面使用.async{}
即可:
1 2 3 |
|
优先级
我们知道,GCD的默认队列的优先级有四个:
- DISPATCH_QUEUE_PRIORITY_HIGH
- DISPATCH_QUEUE_PRIORITY_DEFAULT
- DISPATCH_QUEUE_PRIORITY_LOW
- DISPATCH_QUEUE_PRIORITY_BACKGROUND
现在swift3中正式更名为:
- .userInitialted
- .default
- .utility
- .background
当然,它们的对应关系也就是与顺序相同的:
1 2 3 4 |
|
获取一个队列
我们使用DispatchQueue.global()
获取一个系统的队列,这样的话获取的就是默认.default
优先级的队列了,如果要获取其它优先级的队列,就使用DispatchQueue.global(qos: .userInitiated)
,最后,我们使用.async{}
来执行代码:
1 2 3 |
|
创建一个队列
直接用DispatchQueue
的初始化来创建一个队列,最简单的方法就是:
1
|
|
复杂一点,你可以指定优先级以及队列类别:
1
|
|
然后把代码放进去:
1 2 3 |
|
队列组
对于组,现在你可以使用这样的语法直接创建一个组
1
|
|
使用如下:
1 2 3 4 5 6 7 |
|
那么,如果有多个并发队列在同一个组中,我们徐亚它们完成了再继续:
1
|
|
延迟执行
1 2 3 |
|