Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Используете системный кеш объектов UIImage с изображениями, загруженными из дискового кеша (NSCachesDirectory)?

Автор вопроса: Martijn ThéОтветов: 3

Я пытаюсь повысить производительность прокрутки UITableView, в котором используются ячейки с изображениями, полученными из Интернета, но хранящимися в NSCachesDirectory. Ячейки имеют настраиваемое представление содержимого для рисования содержимого (изображения).

Когда я использую изображение-заполнитель из пакета приложений, используя [UIImage imageNamed:@"Placeholder.png"], прокрутка выполняется очень быстро.

Когда я загружаю изображение из кеша диска (NSCachesDirectory) с помощью [UIImage imageWithContentsOfFile:cachePath], скорость прокрутки ухудшается.

Согласно документации, imageNamed: кеширует изображение, а imageWithContentsOfFile: - нет.

Как использовать системный кеш UIImage при использовании imageWithContentsOfFile:?

Огромное спасибо!

  • Возможно, вы захотите увидеть недавний вопрос, в котором я решил проблему, хранение несжатого изображения. Victor Engel 28.09.2013

iphoneuiimagecaching

Ответы

Ответ 1 · рейтинг 8 · Martijn Thé

Кажется возможным использовать путь к изображению в NSCachesDirectory в качестве аргумента для метода [UIImage imageNamed:]. Метод принимает относительные пути (относительно пакета приложений), например: @"../Library/Caches/SomeCachedImage.png" работает.

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

Ответ 2 · рейтинг 3 · Stefan Arentz

Проблема, скорее всего, в том, что вы загружаете и распаковываете изображение в основном цикле выполнения. Это заблокирует пользовательский интерфейс на короткое время. Вы получите гораздо лучшую производительность, если выполните загрузку и распаковку в отдельном потоке и только установите изображение в основном цикле. (Что также требуется для изменений пользовательского интерфейса, которые устанавливают изображение в UIImageView)

Для этого потребуется дополнительная инфраструктура. Как, например, схема уведомлений или наблюдение за ключевыми значениями.

Ответ 3 · Mihai Damian

Вы не можете. imageWithContentsOfFile: всегда будет загружать изображение из файла (хотя и лениво). Что вы можете сделать, так это создать собственный кеш в памяти с помощью NSArrays или NSDictionaries, в зависимости от того, как вы хотите выполнять поиск.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы