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

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

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

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

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

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

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

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

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

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

TableViewSuite

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

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

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

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

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

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

  • Сохранять / сохранять / восстанавливать позицию прокрутки при возврате в ListView
  • Как программно отключить прокрутку страницы с помощью jQuery
  • Android WebView внутри ScrollView прокручивает только scrollview
  • ipad safari: отключить прокрутку и эффект отскока?
  • прокручивайте вверх и вниз по нажатию на кнопку выбора с помощью jquery
  • Как скрыть элемент при прокрутке страницы?
  • Как я могу получить полосы прокрутки в Picturebox
  • Плавный скроллер на основе положения мыши (JQuery)
  • Могу ли я изменить скорость прокрутки с помощью css или jQuery?
  • как можно включить полосы прокрутки в WPF Datagrid?
  • Активировать анимацию CSS3 при просмотре содержимого
  • Interesting Posts

    Зарегистрированный ECC против ECC небуферизованный

    Рекурсивная анонимная функция Matlab

    Почему многомерные массивы в .NET медленнее, чем обычные массивы?

    Продемонстрировать ковариацию и контравариантность на Java?

    Android – SharedPreferences с сериализуемым объектом

    Исправить ошибку Windows 7, где значки на панели задач указывают на неправильные программы, не требующие перезагрузки

    Как вызвать JSF-бэк-метод только в том случае, когда onclick / oncomplete / on … происходит событие, а не на загрузке страницы

    Использование функции numpy `as_strided` для создания патчей, плиток, скользящих или скользящих окон произвольного размера

    Используйте xcodebuild (Xcode 8) и автоматическое подписание в средах CI (Travis / Jenkins)

    Выбор размера экрана для Windows

    Могу ли я использовать струйную бумагу с покрытием для печати с помощью цветного лазерного принтера?

    Как увеличить размер раздела в Linux (ubuntu 9.04)?

    Двойное десятичное форматирование в Java

    Ошибка при подключении к impala с JDBC при авторизации kerberos

    Возможно ли, чтобы root выполнил команду как non-root?

    Давайте будем гением компьютера.