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

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

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

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

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

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

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

5
задан Martijn Thé 21 February 2010 в 16:38
поделиться

3 ответа

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

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

8
ответ дан 13 December 2019 в 19:26
поделиться

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

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

3
ответ дан 13 December 2019 в 19:26
поделиться

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

0
ответ дан 13 December 2019 в 19:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: