需求描述:
在開發(fā)的過程中盲再,一個(gè)頁面調(diào)用了多個(gè)網(wǎng)絡(luò)請求西设,當(dāng)所有的網(wǎng)絡(luò)請求都完成后,刷新tableView答朋,進(jìn)而更新頁面UI贷揽。
問題:
如果直接調(diào)用多個(gè)網(wǎng)絡(luò)請求后,然后直接在最后一個(gè)網(wǎng)絡(luò)請求里面刷新UI梦碗,由于網(wǎng)絡(luò)請求是異步的禽绪,這么操作的話,就會(huì)出現(xiàn)刷新了UI后洪规,有的網(wǎng)絡(luò)請求還沒結(jié)束印屁。
解決辦法:
使用線程組的方式,請求網(wǎng)絡(luò)U独P廴恕!
// 創(chuàng)建線程組
var groupQueue:DispatchGroup = DispatchGroup.init()
// 網(wǎng)絡(luò)請求1
self.groupQueue.enter()
self.request1()
// 網(wǎng)絡(luò)請求2
self.groupQueue.enter()
self.request2()
// 網(wǎng)絡(luò)請求3
self.groupQueue.enter()
self.request3()
// 網(wǎng)絡(luò)請求都結(jié)束后念赶,會(huì)收到一個(gè)通知
self.groupQueue.notify(queue: DispatchQueue.main) {
self.tableView.reloadData()
}
問題:線程組收到的通知刷新tableView時(shí)础钠,出現(xiàn)頁面跳動(dòng)的問題
解決辦法:
在線程組收到通知后恰力,刷新tableView后,要添加一行代碼旗吁,self.tableView.layoutIfNeeded()
如下所示:
// 網(wǎng)絡(luò)請求都結(jié)束后踩萎,會(huì)收到一個(gè)通知
self.groupQueue.notify(queue: DispatchQueue.main) {
self.tableView.reloadData()
self.tableView.layoutIfNeeded()
}