Я использую библиотеку SDWebImage для загрузки изображений с сервера. https://github.com/rs/SDWebImage
SDWebImage не может обновлять кэшированное изображение, когда изображение обновляется на сервере с тем же URL-адресом.
Я использую библиотеку SDWebImage для загрузки изображений с сервера. https://github.com/rs/SDWebImage
SDWebImage не может обновлять кэшированное изображение, когда изображение обновляется на сервере с тем же URL-адресом.
SDWebImage
выполняет кэширование по умолчанию, поэтому было бы лучше использовать новый URL-адрес, если изображение изменится. Так, например, если вы контролируете URL-адрес и можете изменять его каждый раз, когда изображение изменилось, вы можете это сделать.
Если это не так, попробуйте использовать SDWebImageRefreshCached
в поле options
, чтобы соблюдать заголовки управления кэшем HTTP, например:
[imageView setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
options:SDWebImageRefreshCached];
Подробнее здесь
Обновление: Я на самом деле написал полное руководство по кешу, включая проверку кэша https://kean.github.io/blog/image-caching
SDWebImage
использует NSURLCache
, когда вы устанавливаете опцию SDWebImageRefreshCached
. Система загрузки URL-адресов Apple реализует HTTP-кеш, включая проверку кэшированных ответов. HTTP-кеш довольно сложный, однако есть много руководств для начинающих по кешированию HTTP:
В принципе, сервер должен включать некоторые заголовки управления кешем HTTP в каждом ответе. Существует множество различных стратегий, которые можно использовать для осуществления повторной аттестации. Вы можете использовать либо Last-Modified
, либо ETag
. Таким образом, каждый раз, когда клиент отправляет запрос, он автоматически включает в ваш запрос значение Last-Modified
или ETag
из ранее кэшированного ответа. Если изображение не изменилось, сервер ответит кодом состояния 302 (не изменен), а NSURLConnection/NSURLSession
будет прозрачно выдавать кешированный ответ от NSURLCache
. Вам не нужно снова загружать данные, покупать вам все равно нужно проверять с сервером каждый раз, когда вы делаете запрос.
Вы также можете указать дату истечения срока действия, используя управление кешем HTTP. Если используется механизм истечения срока действия, NSURLConnection/NSURLSession
не будет проверять кешированный ответ, пока он не истек.
Для получения дополнительной информации об управлении кешем HTTP см. ссылки выше. HTTP-кеш - универсальный механизм кэширования, который должен использоваться по возможности.
Я бы порекомендовал использовать Nuke рамки для загрузки изображений (отказ от ответственности: я написал). Он использует NSURLCache
по умолчанию, все еще имея кэш памяти, который содержит распакованные изображения.
Вот код в swift 3, чтобы обновлять кеш каждый раз
imgCardBack.sd_setImage(with: URL(string: objUserData.back_image!), placeholderImage:UIImage(named: "cardBack"), options: .refreshCached)
Если URL-адрес не изменен, теперь SDWebImage позволяет узнать, что изображение было изменено на сервере.