【swift3.0】【GCD】

前端之家收集整理的这篇文章主要介绍了【swift3.0】【GCD】前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

贡献作者 -【XJDomain】
博客XJ: https://my.oschina.net/shengbingli/blog
GitHub直播地址: https://github.com/lishengbing/XJDomainLive

01-基本使用-全局异步队列

DispatchQueue.global().async {
     //耗时操作
}

02-主队列

DispatchQueue.main.async {
     //刷新UI
}

03-延迟操作

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
     // 2秒后执行
}

04-队列组

队列组就是把任务放在DispatchGroup中(入组),当任务执行完毕时(出组),即当DispatchGroup中没有任务时,调用监听方法notify注意:入组和出组一定要成对出现,有几个入组,就一定需要有几个出组

// 创建一个队列组
let group = DispatchGroup()  
// A任务入组
group.enter()
// A任务异步操作
DispatchQueue.global().async(group: group,execute: DispatchWorkItem(block: {
     sleep(2)
     print("download task A ...")
     // 出组
     group.leave()
}))
// B任务入组
group.enter()
// B任务异步操作
DispatchQueue.global().async(group: group,execute: DispatchWorkItem(block: {
     sleep(2)
     print("download task B ...")
     // 出组
     group.leave()
}))
// 主线程监听,只有当队列组中没有任务,才会执行闭包。如果多次调用方法,每次都会去检查队列组中是否有任务,如果没有任务才执行
group.notify(queue: DispatchQueue.main) { 
     print("complete!")
}

因为task A和task B是加在全局队列中,所以它们的执行顺序由系统决定,但是complete一定是在两个任务完成后才执行。

猜你在找的Swift相关文章