Как правило, перезагрузки табличного представления следует рассматривать как недорогую операцию, и, если вы испытываете некоторую задержку / отсутствие ответа при перезагрузке табличного представления, первые области, к которым следует обратиться, будут:
Столовые ячейки снимаются, а не создаются каждый раз, когда они нужны?Если нет, удалите из кэша ячейки.
Есть ли какая-то дорогостоящая операция внутри tableView(cellForRowAt:IndexPath)
?Если это так, посмотрите, как это сделать быстрее.
Вы анализируете свой HTTP-ответ в основном потоке?Если это так, то это может быть причиной задержки, а не перезагрузки самого табличного представления, поэтому вы можете переместить его в фоновый режим, и все будет в порядке.
Если ни одна из них не является проблемой, и вы все еще получаете низкую производительность пользовательского интерфейса из-за перезагрузки табличного представления, тогда вы можете выполнить то, о чем вы спрашиваете, сравнивая новый набор данных, полученный из ответа HTTP, с существующей таблицейпросмотреть данные, прежде чем перезагрузить.Самый простой способ сделать это - сохранить локальную переменную как часть контроллера табличного представления и проверить это в HTTP-запросе:
class MyTableViewController : UITableViewController {
var tableViewData: NSArray
func isEqual(_ oldData: NSArray, newData: NSArray) -> Bool {
// check that all the records in the array are equal
}
// call this from inside the onHttpSuccess method in place of self.tableView.reloadData()
func reloadIfNeccecary(newData: NSArray) {
if !isEqual(tableViewData, newData) {
self.tableView.reloadData()
}
}
}
Примечание: What you на самом деле следует делать вместо использования NSArray
и NSDictionary
здесь для анализа HTTP-ответа с использованием пользовательской структуры и протокола Decodable
.Затем вы можете сделать элементы массива вашего объекта ответа Equatable
, а затем он сделает реализацию isEqual
тривиальной.