Я пытаюсь улучшить прокрутку производительности на a UITableView
это использует ячейки с изображениями, выбранными от сети, но сохраненными в NSCachesDirectory
. Ячейки имеют пользовательское довольное представление для рисования содержания (изображение).
Когда я использую изображение заполнителя от комплекта приложений, с помощью [UIImage imageNamed:@"Placeholder.png"]
, прокрутка производительности супер быстра.
Когда я загружаю изображение из дискового кэша (NSCachesDirectory
) использование [UIImage imageWithContentsOfFile:cachePath]
, прокрутка производительности ухудшается.
Согласно документации, imageNamed:
кэширует изображение и imageWithContentsOfFile:
не делает.
Как использовать UIImage
системный кэш при использовании imageWithContentsOfFile:
?
Огромное спасибо!
Кажется, можно использовать путь к изображению в NSCachesDirectory
в качестве аргумента для метода [UIImage imageNamed:]
. Метод принимает относительные пути (относительно пучка приложений), например: @"../Library/Caches/SomeCachedImage.png"
works.
UIImage автоматически кэширует изображение в памяти, если оно используется несколько раз, что улучшает производительность, когда изображение используется несколько раз в табличном представлении.
Проблема, скорее всего, в том, что вы загружаете и распаковываете изображение в основном цикле выполнения. Это заблокирует пользовательский интерфейс на короткое время. Вы получите гораздо лучшую производительность, если выполните загрузку и распаковку в отдельном потоке и только установите изображение в основном цикле. (Что также требуется для изменений пользовательского интерфейса, например, для установки изображения в UIImageView)
Для этого потребуется дополнительная инфраструктура. Как, например, схема уведомлений или наблюдение за значением ключа.
Ты не можешь. imageWithContentsOfFile:
всегда будет загружать изображение из файла (хотя и лениво). Что вы можете сделать, так это создать собственный кэш в памяти с помощью NSArrays или NSDictionaries, в зависимости от того, как вы хотите выполнять поиск.