SDWebImageライブラリを使用してサーバーから画像をダウンロードしています。 https://github.com/rs/SDWebImage
SDWebImageは、サーバー上で同じURLを使用して画像を更新すると、キャッシュされた画像を更新できません。
SDWebImage
はデフォルトでキャッシュを行うため、画像が変更された場合は新しいURLを使用することをお勧めします。したがって、たとえば、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/画像キャッシュ
SDWebImage
は、NSURLCache
オプションを設定するとSDWebImageRefreshCached
を使用します。 AppleのURLロードシステムは、キャッシュされた応答の検証を含むHTTPキャッシュを実装しています。 HTTPキャッシュは非常に複雑ですが、HTTPキャッシングに関する多くの初心者向けガイドがあります。
基本的に、サーバーは各応答にHTTPキャッシュ制御ヘッダーの一部を含める必要があります。再検証を実装するために使用できるさまざまな戦略があります。 Last-Modified
またはETag
を使用できます。このようにして、クライアントがリクエストを送信するたびに、以前にキャッシュされたレスポンスのLast-Modified
またはETag
値をリクエストに自動的に含めます。イメージが変更されていない場合、サーバーはステータスコード302(変更されていない)で応答し、NSURLConnection/NSURLSession
はNSURLCache
からキャッシュされた応答を透過的に提供します。データを再度ダウンロードする必要はありません。購入するたびに、サーバーに確認する必要があります。
HTTPキャッシュコントロールを使用して有効期限を指定することもできます。期限切れメカニズムが使用されている場合、NSURLConnection/NSURLSession
は期限切れになるまでキャッシュされた応答を再検証しません。
HTTPキャッシュ制御の詳細については、上記のリンクを参照してください。 HTTPキャッシュは、可能な限り使用する必要があるユニバーサルキャッシュメカニズムです。
画像の読み込みには Nuke フレームワークを使用することをお勧めします(免責事項:私が作成)。デフォルトではNSURLCache
を使用しますが、解凍された画像を保持するメモリキャッシュはまだあります。
Swift 4 SDWebImageライブラリで次の関数を使用するだけです。
SDImageCache.shared().removeImage(forKey: (ImagePath), withCompletion: nil)
この関数は、メモリとディスクに保存されたキャッシュを削除します。その後、新しい画像を同時にアップロードすると、完全に機能します。
ここにSwift 3毎回キャッシュを更新する)のコードがあります
imgCardBack.sd_setImage(with: URL(string: objUserData.back_image!), placeholderImage:UIImage(named: "cardBack"), options: .refreshCached)
SDWebImageManager.mファイルの行番号176に移動し、この行を変更します
if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache;
以下のコードに。
if (options & SDWebImageRefreshCached) {
// force progressive off if image already cached but forced refreshing
downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload;
// remove SDWebImageDownloaderUseNSURLCache flag
downloaderOptions &= ~SDWebImageDownloaderUseNSURLCache;
//ignore image read from NSURLCache if image is cached but force refreshing
downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse;
}
私にとってそれは魅力のように働きました。