使用场景
1、简化代码易读性,似的获取数据与界面刷新分离
2、处理多线程并发执行,处理多任务请求结束后的UI刷新问题
3、与网络请求第三方的混合使用
一、创建DispatchGroup与简单实用
创建队列组
lazy var gropQueue:DispatchGroup = {
let grop:DispatchGroup = DispatchGroup.init()
return grop
}()
简单的模拟DispatchGroup与DispatchQueue使用
func textGroup() -> Void {
let queue:DispatchQueue = DispatchQueue.init(label: "textQueue")
// 队列queue加入队列组
queue.async (group: self.gropQueue){
/*任务一*/
}
self.gropQueue.notify(queue: DispatchQueue.main) {
/*界面处理*/
}
}
模拟多任务并发处理
func textMoreQueue() -> Void {
let queue1:DispatchQueue = DispatchQueue.init(label: "textQueue1")
let queue2:DispatchQueue = DispatchQueue.init(label: "textQueue2")
let queue3:DispatchQueue = DispatchQueue.init(label: "textQueue3")
// 队列queue加入队列组
queue1.async (group: self.gropQueue){
/*任务1*/
}
queue2.async (group: self.gropQueue){
/*任务2*/
}
queue3.async (group: self.gropQueue){
/*任务3*/
}
/*三个异步任务完成后执行界面处理操作*/
self.gropQueue.notify(queue: DispatchQueue.main) {
/*界面处理*/
}
}
以上是通过创建异步线程进行任务处理操作,一款app中最重要的就是数据与界面!下面我们从简单到复杂去处理异步请求与界面刷新
二、网络请求第三方的混合使用
在异步线程中的回调方法中去刷新界面
/*获取推荐列表*/
func getInfomation() -> Void {
let requestUrl:String = "https://www.apiopen.top/novelApi"
Alamofire.request(requestUrl, method: .get).responseJSON { (response) in
if let json = response.result.value {
let jsonDic:Dictionary<String,Any> = json as! Dictionary
let array:Array<Any> = jsonDic["data"] as! Array
self.allArray.append(array)
/*处理界面数据刷新界面*/
} else {
}
}
}
上述代码是我们常见的异步请求与界面刷新的组合方式之一、其优点在于代码结果简单易读,缺陷是如果我们返回的数据含有多种数据结果,例如这个推荐列表放回的数据结果有四