Трюки для улучшения производительности прокрутки iPhone UITableView?
У меня есть uitableview, который загружает довольно большие изображения в каждой ячейке и высоты ячеек варьируются в зависимости от размера изображения. Производительность прокрутки приличная, но иногда может быть отрывистой.
Я нашел эти советы, которые я нашел в блоге FieryRobot:
glassy-scrolling-with-uitableview
more-glassy-scrolling-with-uitableview
есть ли у кого-нибудь советы по улучшению прокрутки uitableview спектакль?
5 ответов:
- кэшировать высоту строк (табличное представление может запрашивать это часто)
- создать наименее недавно используемый кэш для изображений, используемых в таблице (и аннулировать все неактивные записи при получении предупреждения памяти)
- нарисуйте все в
UITableViewCell
' sdrawRect:
если возможно, избегайте вложенных представлений любой ценой (или если вам требуется стандартная функциональность доступности, представление содержимогоdrawRect:
)- сделать свой
UITableViewCell
слой непрозрачный (такой же идет для просмотра содержимого, если у вас есть один)- используйте функцию reusableCellIdentifier в соответствии с рекомендациями
UITableView
примеры/документация- избегайте градиентов/сложных графических эффектов, которые не предварительно запеченные в
UIImage
s
- Если вы подклассы
UITableViewCell
, Не используйте перо, писать его в код. Это очень много быстрее, чем загрузка файлов ниб.- Если вы используете изображения, убедитесь, что вы кэшируете их, так что вы не делаете придется загрузить из файла больше, чем один раз для каждого (если у вас есть память-вы будете удивлены, как много космических снимков занимают).
- сделать столько элементов непрозрачными, сколько вероятный. Точно так же старайтесь не использовать изображения с прозрачностью.
разработчик за Tweetie подробно написал об этом и имеет некоторый код, который демонстрирует, как это было сделано для этого приложения. В основном, он / она защищает один пользовательский вид на ячейку таблицы и рисует его вручную (а не подвидом с помощью Interface Builder, среди других опций).
быстрая прокрутка-в-tweetie-с-uitableview
кроме того, Apple обновила свой собственный пример кода для TableView в своих учебниках TableViewSuite (возможно, в ответ к этому?)
#1 performance killer для прокрутки UITableView рисует тени на любом слое вида ячейки, поэтому, если производительность прокрутки имеет значение, не делайте тени, если в основном это не замедляет ваш основной поток.
думал, что это должно быть сказано, так как ни один из принятых ответов не упоминал о тенях и слоях. :+)
никаких проблем с
UITableView
производительность прокрутки может быть решена с помощью методов, уже описанных в других ответах. Однако во многих случаях вялое исполнение вызвано чем-то изначально ошибочным или повторяющимся.дело в том, что
UITableView
повторно использует ячейки, и тот факт, что каждая ячейка может нуждаться в своем собственном изображении - вместе делает решение немного сложным. Из того, как это решается в общем виде, здесь я суммирую вещи, о которых следует позаботиться оф:
- загрузить данные в источник данных-из REST / базы данных. Этот шаг должен быть выполнен в фоновом режиме, в конечном итоге с помощью dispatch_async вместе с очередью GCD.
- создать и инициализировать соответствующие объекты модели данных и поместить их в массив
[tableView reloaddata]
- внутри
cellForRowAtIndexPath
, включить код, который будет устанавливать данные (текст) из правильного объекта модели данных массива.- теперь изображения, возможно, в виде URL тоже, так что этот шаг может будьте немного изворотливы из-за повторного использования ячеек, выполненного табличным представлением. Суть в том, чтобы снова загрузить изображение из кэша устройства / URL с помощью асинхронной очереди, а затем установить его в правильную ячейку.изображение (независимо от того, что является вашим свойством изображения ячейки).
чтобы избежать проблем, обратитесь к этому учебнику о ленивая загрузка изображений внутренний вид таблицы.