如果在reloadDate後需要立即獲取tableview的cell、高度,或者需要滾動tableview,那麼,直接在reloadData後執行代碼是有可能出問題的。
reloadDate並不會等待tableview更新結束後才返回,而是立即返回,然後去計算表高度,獲取cell等。
如果表中的數據非常大,在一個run loop周期沒執行完,這時,需要tableview視圖數據的操作就會出問題了。
apple並沒有直接提供reloadData的api,想要程序延遲到reloadData結束在操作,可以用以下方法
方法1:
[self.tableView reloadData]; [self.tableView layoutIfNeeded]; //刷新完成
layoutIfNeeded會強制重繪並等待完成。
方法2:
[self.tableView reloadData]; dispatch_async(dispatch_get_main_queue(), ^{ //刷新完成 });