каково стандартное поведение кэширования NINetworkImageView в Nimbus для iOS - PullRequest
1 голос
/ 02 сентября 2011

Я смотрел на NINetworkImageView в проекте Nimbus и мне было любопытно, что настройки кэширования по умолчанию установлены. Когда я вызываю setPathToNetworkImage и загружает изображение, оно попадает в глобальный кеш? Достаточно ли он умен, чтобы понять, что это то же самое изображение, если мы создадим другой networkImageView с тем же pathToNetworkImage и, таким образом, избежим сетевого запроса?

По умолчанию он хранится в памяти или на диске? Какова длительность кэша по умолчанию?

1 Ответ

6 голосов
/ 03 сентября 2011

Как только я вызываю setPathToNetworkImage и загружает изображение, оно попадает в глобальный кеш?

Да. По умолчанию он попадает в глобальный кэш изображений Nimbus в памяти. Вот что происходит в фоновом режиме: как только изображение загружается и до того, как изображение возвращается в поток пользовательского интерфейса, необработанное изображение сохраняется в кеше диска [1]. Как только поток загрузки возвращается, необработанное изображение устанавливается в UIImageView, и необработанное изображение также сохраняется в кеше в памяти.

Достаточно ли умен, чтобы понять, что это то же самое изображение, если мы создадим другой networkImageView с тем же pathToNetworkImage и, таким образом, избежим сетевого запроса?

Да. Пока он имеет все те же настраиваемые свойства [2], он сразу же загрузит изображение из кэша в памяти, если оно существует. Вы можете увидеть, как генерируется ключ кэша изображения здесь: https://github.com/jverkoey/nimbus/blob/master/src/networkimage/src/NINetworkImageView.m#L144

[1] Это потому, что сохранение на диск является операцией блокировки, которую мы не хотим блокировать потоком пользовательского интерфейса.

[2] Если у вас два просмотра сетевых изображений, загружающих один и тот же URL-адрес, но один из них имеет другой режим содержимого, то изображение необходимо будет обработать дважды, поскольку ключи кэша в памяти будут отличаться. При этом для ключа кэша диска используется только URL-адрес изображения, поэтому в конечном итоге мы попадем в сеть только один раз, кешируем изображение, а затем при втором просмотре сетевого изображения загрузим изображение с диска и обрежем его вместе с другим контентом. режим.

В сторону: похоже, что документация для двух свойств кеша не работает, поэтому мне придется это исправить.

...