需求描述:
在开发的过程中,一个页面调用了多个网络请求,当所有的网络请求都完成后,刷新tableView,进而更新页面UI。
问题:
如果直接调用多个网络请求后,然后直接在最后一个网络请求里面刷新UI,由于网络请求是异步的,这么操作的话,就会出现刷新了UI后,有的网络请求还没结束。
解决办法:
使用线程组的方式,请求网络!!!
// 创建线程组
var groupQueue:DispatchGroup = DispatchGroup.init()
// 网络请求1
self.groupQueue.enter()
self.request1()
// 网络请求2
self.groupQueue.enter()
self.request2()
// 网络请求3
self.groupQueue.enter()
self.request3()
// 网络请求都结束后,会收到一个通知
self.groupQueue.notify(queue: DispatchQueue.main) {
self.tableView.reloadData()
}
问题:线程组收到的通知刷新tableView时,出现页面跳动的问题
解决办法:
在线程组收到通知后,刷新tableView后,要添加一行代码,self.tableView.layoutIfNeeded()
如下所示:
// 网络请求都结束后,会收到一个通知
self.groupQueue.notify(queue: DispatchQueue.main) {
self.tableView.reloadData()
self.tableView.layoutIfNeeded()
}