2014-02-14 3 views
0

У меня есть коллекцияView, которая отображает 9 изображений (200x300 пикселей) за раз. Однако общее число может увеличиться до сотен.NSCache с сотнями изображений

В настоящее время я проверяю cellForItem, если изображение находится в кеше. Если нет, я загружу его из файловой системы и поставлю в кеш.

Проблема: при первом просмотре коллекции она будет отбрасывать кадры, поскольку она по-прежнему загружает изображения из файловой системы. После первого прокручивания масло сливочное. (Это на 5s)

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

Я не вижу большой проблемы с 5s, но я боюсь, что это сломает устаревшее оборудование.

Любые мысли?

+0

пожалуйста, сообщение 'код cellForItem' – vokilam

+0

Он просто проверяет, если изображение находится в кэше, и если не загружает его с диска в кеш, точно так же, как я описал выше. – 1b0t

ответ

2

Попробуйте выполнить механизм загрузки диска в фоновом режиме. Вы можете настроить очередь с NSOperationQueue, заполненную загрузкой.

Использование NSCache с механизмами предварительной загрузки не имеет большого смысла, поскольку даже если вы загружаете все изображения, система может и будет выходить из кэша, если сочтет это подходящим. В этом случае работа, которую вы делали с предварительной загрузкой, была безуспешной.

+0

Это звучит как хорошая идея. Я не понимал, что UIImage выполняет синхронную загрузку изображения. Но это имеет смысл. Я попробую! Благодаря! – 1b0t

+0

это волшебство :) Спасибо! – 1b0t

+0

Счастливые помочь. Если вам нужно выполнить некоторую асинхронную загрузку в Интернете (вместо загрузки диска), в будущем вы, возможно, захотите рассмотреть ответ Николая. – ff10

2

Вы посмотрели SDWebImage? его уже содержат an asynchronous memory + disk image caching with automatic cache expiration handling

А также, я обычно поджать все изображения, чтобы избежать мерцания

Смежные вопросы