Skip to content

Latest commit

 

History

History
31 lines (20 loc) · 3.12 KB

Readme.md

File metadata and controls

31 lines (20 loc) · 3.12 KB

Загрузчик изображений

Предпосылки

Приложения часто отображают большое кличество изображений с сервера доступных по url. Для показа их надо предварительно загрузить, а так же кэшировать, что бы избежать повторной загрузки.

Исходные данные

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

Задание

Основное: Необходимо добавить имплементацию в класс ImageDownloader не меняя публичного интерфейса. ImageDownloader должен загружать изображения по ссылке. Уже загруженные изображения должны кэшироваться в оперативной памяти и на диске.

Алгоритм получения фото должен быть следующий: 1) Ищем изображение в памяти и если оно имеется возвращаем его 2) Иначе ищем на диске, если нашлось возвращаем его 3) Иначе загружаем изображение из сети, добавляем в кэш, возвращаем.

Каждое изображение должно обрабатываться в отдельном потоке. Можно использовать GCD или Operation по вкусу. Необходимо обрабатывать ситуацию, когда изображение зпрашивается повтороно, в момент когда операция его получения находится в процессе. При этом, Повторный запрос должен дождаться окончания предыдущей операции и использовать ее результат из кэша в оперативной памяти.

Дополнительные: Реализовать собственную имплементацию Operation и OperationQueue поверх GCD и использовать в ImageDownloader. Не обязательно реализовывать все интерфейсы. Достаточно минимума для использования в ImageDownloader.

Подсказки

  • В качестви id изображения удобно использовать url изображения, но при использовании url в качестве имени файла не корректно, необходимо кодировать в безопасный формат.
  • Пока вы не умеете работать с файловой системой, можно ограничится кэшированием в оперативной памяти