Каково поведение кэширования по умолчанию NINetworkImageView в Nimbus для iOS
Я смотрел на NINetworkImageView в проекте Nimbus и мне было любопытно, что настройки кэширования по умолчанию установлены. Как только я вызываю setPathToNetworkImage и загружает изображение, оно попадает в глобальный кеш? Достаточно ли он умен, чтобы понять, что это то же самое изображение, если мы создадим еще один networkImageView с тем же pathToNetworkImage и, таким образом, избежим сетевого запроса?
По умолчанию он хранится в памяти или на диске? Какова длительность кэша по умолчанию?
1 ответ
Как только я вызываю setPathToNetworkImage и загружает изображение, оно попадает в глобальный кеш?
Да. По умолчанию он входит в глобальный кэш изображений Nimbus в памяти. Вот что происходит в фоновом режиме: как только изображение загружается и до того, как изображение возвращается в поток пользовательского интерфейса, необработанное изображение сохраняется в кеше диска [1]. Как только поток загрузки возвращается, необработанное изображение устанавливается в UIImageView, и необработанное изображение также сохраняется в кеше в памяти.
Достаточно ли он умен, чтобы понять, что это то же самое изображение, если мы создадим еще один networkImageView с тем же pathToNetworkImage и, таким образом, избежим сетевого запроса?
Да. Пока он имеет все те же настраиваемые свойства [2], он сразу же загрузит изображение из кэша в памяти, если оно существует. Вы можете увидеть, как генерируется ключ кэша изображения, здесь: https://github.com/jverkoey/nimbus/blob/master/src/networkimage/src/NINetworkImageView.m#L144
[1] Это связано с тем, что сохранение на диск является операцией блокировки, которой мы не хотим блокировать поток пользовательского интерфейса.
[2] Если у вас есть два вида сетевых изображений, загружающих один и тот же URL-адрес, но один из них имеет другой режим содержимого, то изображение необходимо будет обработать дважды, поскольку ключи кэша в памяти будут отличаться. При этом для ключа кэша диска используется только URL-адрес изображения, поэтому в конечном итоге мы попадем в сеть только один раз, кешируем изображение, а затем при втором просмотре сетевого изображения загрузим изображение с диска и обрежем его вместе с другим контентом. Режим.
Кроме того: похоже, что документация по двум свойствам кеша не работает, поэтому мне придется это исправить.