Использование системного кэша объектов UIImage с изображениями, загруженными из дискового кэша (NSCachesDirectory)? - PullRequest
5 голосов
/ 21 февраля 2010

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

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

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

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

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

Спасибо большое!

Ответы [ 3 ]

8 голосов
/ 24 февраля 2010

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

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

3 голосов
/ 21 февраля 2010

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

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

0 голосов
/ 21 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...