Приложения часто отображают большое кличество изображений с сервера доступных по url. Для показа их надо предварительно загрузить, а так же кэшировать, что бы избежать повторной загрузки.
Прилоежние содержит один экран с таблицей, таблица отображет список изображений и их url. В каждой ячейке доступен ImageDownloader. И с его помощью зашружаются изображения.
Основное:
Необходимо добавить имплементацию в класс ImageDownloader
не меняя публичного интерфейса. ImageDownloader
должен загружать изображения по ссылке. Уже загруженные изображения должны кэшироваться в оперативной памяти и на диске.
Алгоритм получения фото должен быть следующий: 1) Ищем изображение в памяти и если оно имеется возвращаем его 2) Иначе ищем на диске, если нашлось возвращаем его 3) Иначе загружаем изображение из сети, добавляем в кэш, возвращаем.
Каждое изображение должно обрабатываться в отдельном потоке. Можно использовать GCD или Operation по вкусу. Необходимо обрабатывать ситуацию, когда изображение зпрашивается повтороно, в момент когда операция его получения находится в процессе. При этом, Повторный запрос должен дождаться окончания предыдущей операции и использовать ее результат из кэша в оперативной памяти.
Дополнительные:
Реализовать собственную имплементацию Operation
и OperationQueue
поверх GCD и использовать в ImageDownloader
.
Не обязательно реализовывать все интерфейсы. Достаточно минимума для использования в ImageDownloader
.
- В качестви id изображения удобно использовать url изображения, но при использовании url в качестве имени файла не корректно, необходимо кодировать в безопасный формат.
- Пока вы не умеете работать с файловой системой, можно ограничится кэшированием в оперативной памяти