GCD常用的用法
子线程
dispatchQueue.global().async { print("开一条全局队列异步执行任务") }
主线程
dispatchQueue.main.async { print("在主队列执行任务") }
wait
var myQueue = dispatchQueue(label: "第一条线程")var myQueue2 = dispatchQueue(label: "第二条线程")let group = dispatchGroup()myQueue.async(group: group,qos: .default,flags: []) { for _ in 0...10 { print("耗时任务一") }}myQueue.async(group: group,flags: []) { for _ in 0...10 { print("耗时任务二") sleep(UInt32(3)) }}//等待上面任务执行,会阻塞当前线程,超时就执行下面的,上面的继续执行。可以无限等待 .distantFuturelet result = group.wait(timeout: .Now() + 2.0) switch result {case .success: print("不超时,上面的两个任务都执行完")case .timedOut: print("超时了,上面的任务还没执行完执行这了")}print("接下来的 *** 作")
notify
let group = dispatchGroup() myQueue?.async(group: group,flags: [],execute: { for _ in 0...10 { print("耗时任务一") } }) myQueue?.async(group: group,execute: { for _ in 0...10 { print("耗时任务二") } }) //执行完上面的两个耗时 *** 作,回到myqueue队列中执行下一步的任务 group.notify(queue: myQueue!) { print("回到该队列中执行") }
barrIEr
myQueue?.async {//任务一 for _ in 0...10 { print("......") } } myQueue?.async {//任务二 for _ in 0...10 { print("++++++"); } } // barrIEr 会等待上面执行完毕再执行下面的,会阻塞当前线程 // myQueue?.async(flags:.barrIEr,execute: {//1. // print("000000") // }) myQueue?.async(group: nil,flags: .barrIEr,execute: {//2. print("000000") }) myQueue?.async { print("111111") }总结
以上是内存溢出为你收集整理的[Swift 开发] GCD常用方法全部内容,希望文章能够帮你解决[Swift 开发] GCD常用方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)