Способ повышения производительности в табличных представлениях с большим числом строк и динамической высотой ячеек заключается в кэшировании высоты ячеек после их первого вычисления.
Упрощенный подход для достижения этой цели - сохранить NSMutableDictionary
, в котором ключом является идентификатор записи в ячейке (или любой другой идентификатор, который у вас может быть), а значение - NSNumber
с высотой. ряда. Как только высота будет вычислена впервые, сохраните ее NSMutableDictionary
по идентификатору записи. В tableView:heightForRowAtIndexPath
и tableView:estimatedHeightForRowAtIndexPath:
вы проверяете высоту в кэше в словаре и возвращаете ее, если она найдена. Если не найдено, рассчитайте высоту и сохраните в кеше, прежде чем возвращать высоту.
Возможно, вам следует быть осторожным с аннулированием кэша для строк, которые изменяют высоту. Например, если у вас есть кнопка раскрытия в одной из ваших ячеек, вам нужно будет удалить высоту этой ячейки из кэша, как только будет нажата кнопка расширения, вызывается метод делегата для высоты.
Возможно, у вас все еще будет снижение производительности, если вы попытаетесь отобразить 1000 ячеек одновременно, когда таблица показывает, так как это, вероятно, вызовет метод высоты для каждой строки. Обходной путь для этого - сначала прогреть кэш, если возможно, в фоновом режиме, прежде чем отображать ячейки.