Производительность и оптимизация UIImage с помощью UITableViews

Я использую несколько изображений для стилизации UITableViewCells, и я хочу убедиться, что все делаю правильно, во-первых, чтобы обеспечить хорошее управление памятью, а во-вторых, чтобы все было как можно быстрее (у меня проблемы с медленностью прокрутка!).

Я знаю, что использование [UIImage imageNamed:] приведет к кэшированию изображений для повышения скорости, поэтому можно ли использовать это для получения всех моих изображений? Или лучше вызвать это только один раз для каждого UITableViewController и сохранить изображение как переменную экземпляра, повторно используя один и тот же объект UIImage для всех моих ячеек?

Я использую прозрачные PNG и прозрачные цветные представления в моей таблице и ячейках, чтобы получить желаемый вид. Есть ли какие-нибудь советы по обеспечению максимально быстрой визуализации, чтобы обеспечить плавную прокрутку представления таблицы? На данный момент у меня всего около 10 рядов (ячеек), и это уже довольно вяло. Я использую контроллер полученных результатов для получения данных, поэтому не думаю, что это могло быть причиной этого.

Большое спасибо,

Майкл


person Michael Waterfall    schedule 22.09.2009    source источник


Ответы (3)


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

Другой большой удар - это неправильное повторное использование ячеек.

Контроллер полученных результатов не должен делать ничего, чтобы замедлить работу. Вы можете попробовать использовать инструменты, чтобы убедиться в этом ...

person Kendall Helmstetter Gelner    schedule 23.09.2009
comment
Так это проблема, просто имея непрозрачную ячейку с градиентом на ней и 2 прозрачных UILabels (аналогично UITableViewCellStyleSubtitle)? Для меня эта настройка все еще довольно медленная, чтобы прокручивать и перетаскивать. Обидно, если это правда! - person Michael Waterfall; 23.09.2009
comment
Да, проблема именно в этом. По мере прокрутки он перерисовывает все это ... подумайте о том, чтобы поместить все это в представление, отобразить результаты в UIImage и использовать это в drawRect. Или в drawRect рисование строки текста прямо на градиенте. - person Kendall Helmstetter Gelner; 23.09.2009

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

person luvieere    schedule 22.09.2009

  1. Если вы используете одно и то же изображение для всех ячеек таблицы, лучше получить изображение из системного кеша изображений с помощью + (UIImage) imageNamed: (NSString *) inName API.

  2. Попробуйте получить каждую свою ячейку, используя dequeueReusableCell API UITableViewCell. Если это возвращает nil, тогда создайте только новый объект ячейки.

  3. Если цвет представления таблицы прозрачный (UIClearColor), установите для свойства непрозрачности представления таблицы значение NO.

person Shreekara    schedule 23.09.2009