加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【swift3.0】【GCD】

发布时间:2020-12-14 06:34:44 所属栏目:百科 来源:网络整理
导读:贡献作者 -【XJDomain】 博客XJ: https://my.oschina.net/shengbingli/blog GitHub直播地址 : https://github.com/lishengbing/XJDomainLive 01-基本使用-全局异步队列 DispatchQueue.global().async { //耗时操作} 02-主队列 DispatchQueue.main.async { //

贡献作者 -【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一定是在两个任务完成后才执行。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读