Трюки для повышения производительности прокрутки iPhone UITableView?

У меня есть uitableview, который загружает довольно большие изображения в каждую ячейку, а высота ячейки варьируется в зависимости от размера изображения. Производительность прокрутки приличная, но иногда может быть прерывистой.

Я нашел эти советы в блоге FieryRobot:

стекловидный прокрутки-с-UITableView

более-стекловидный прокрутки-с-UITableView

У кого-нибудь есть советы по улучшению производительности прокрутки в uitableview?

5 ответов

Решение
  1. Кэшируйте высоту строк (табличное представление может запрашивать это часто)
  2. Создайте кэш с наименьшим количеством использованных изображений для таблицы, используемой в таблице (и сделайте недействительными все неактивные записи, когда вы получите предупреждение о памяти)
  3. Нарисуй все в UITableViewCell"s drawRect: по возможности избегайте подпредставлений любой ценой (или, если вам требуется стандартная функциональность доступности, представление контента drawRect:)
  4. Сделай свой UITableViewCellнепрозрачный слой (то же самое относится и к просмотру контента, если он у вас есть)
  5. Используйте функцию reusableCellIdentifier в соответствии с рекомендациями UITableView примеры / документация
  6. Избегайте градиентов / сложных графических эффектов, которые предварительно не запекаются в UIImages
  1. Если вы подклассUITableViewCell, не используйте Nib, вместо этого запишите его в коде. Это намного быстрее, чем загрузка файлов Nib.
  2. Если вы используете изображения, убедитесь, что вы их кэшируете, чтобы вам не приходилось загружать из файла более одного раза для каждого (если у вас есть память - вы будете удивлены, сколько места занимают изображения).
  3. Сделайте как можно больше элементов непрозрачными. Точно так же, старайтесь не использовать изображения с прозрачностью.

Разработчик Tweetie много писал об этом и имеет некоторый код, который демонстрирует, как это было сделано для этого приложения. По сути, он / она защищает одно настраиваемое представление для каждой ячейки таблицы и рисует его вручную (вместо других подпрограмм в Интерфейсном Разработчике, среди других вариантов).

быстрая прокрутка-в-Tweetie-с-UITableView

Кроме того, Apple обновила свой собственный пример кода для TableView в своих руководствах TableViewSuite (может быть, в ответ на это?)

TableViewSuite

Убийца производительности № 1 для прокрутки UITableView - рисование теней на любом слое представления ячеек, поэтому, если производительность прокрутки имеет значение, не делайте тени, если в основном это не замедляет ваш основной поток.

Я подумал, что это должно быть сказано, так как ни один из принятых ответов не упомянул о тенях и слоях.:+)

Любая проблема с UITableView производительность прокрутки может быть решена с использованием методов, уже описанных в других ответах. Однако во многих случаях вялое исполнение вызвано чем-то ошибочным или повторяющимся.

Дело в том, что UITableView повторное использование ячеек, и тот факт, что каждая ячейка может нуждаться в собственном изображении - вместе делает решение немного сложным. Из того, как это решается в общем виде, здесь я суммирую вещи, о которых нужно позаботиться:

  1. Загрузка данных в источник данных - из REST / базы данных. Этот шаг должен быть выполнен в фоновом режиме, в конечном итоге используя dispatch_async вместе с GCD-очередью.
  2. Создать и инициализировать соответствующие объекты модели данных и поместить их в массив
  3. [tableView reloaddata]
  4. внутри cellForRowAtIndexPath, включите код, который будет устанавливать данные (текст) из правильного объекта модели данных массива.
  5. Теперь изображения также могут быть в форме URL, поэтому этот шаг может быть немного странным из-за повторного использования ячеек в табличном представлении. Суть в том, чтобы снова загрузить изображение из кэша / URL-адреса устройства с помощью асинхронной очереди, а затем установить для него правильное значение cell.image (независимо от того, какое у вас свойство изображения ячейки).

Чтобы избежать проблем, обратитесь к этому руководству о отложенной загрузке изображений в табличном представлении.

Другие вопросы по тегам