What happens to SDWebImage Cached Images in my app when the image file on the server changes? What happens to SDWebImage Cached Images in my app when the image file on the server changes? objective-c objective-c

What happens to SDWebImage Cached Images in my app when the image file on the server changes?


I had a look at the source code. It processes the setImageWithURL method like this:

  1. Ask the memory cache if the image is there, if yes return the image and don't go any further
  2. Ask the disk cache if the image is there, if yes return the image and don't go any further
  3. Try to download the image, return image on success else keep the placeholder image

There is no request sent to ask the remote server if there is a new version while there is something old on disk, like using ETags of the HTTP protocol.

Digging a bit deeper the cache time is set to a static value in SDImageCache.m

static NSInteger cacheMaxCacheAge = 60*60*24*7; // 1 week

it cannot be changed with a setter.

So as long as the image in the cache is valid the SDWebImage lib won't download anything new. After a week it'll download your changed image.


You can use options parameter.

Swift version:

imageView.sd_setImage(with: URL(string: URLWithString:profilePictureUrl),                      placeholderImage: UIImage(named: "placeholder"),                      options: .refreshCached,                      completed: nil)

Objective-C version:

[imageView sd_setImageWithURL:[NSURL URLWithString:profilePictureUrl]             placeholderImage:[UIImage imageNamed:@"placeholder.png"]             options:SDWebImageRefreshCached             completed: nil];

Cheers!


The problem with SDImageCache's aging (which now has a setter: maxCacheAge) is that SDWebImage never really proactively does anything with it. You need to invoke cleanDisk yourself at some point to purge old data from the cache. Note: SDWebImage does invoke cleanDisk when the app terminates, but apps are not guaranteed to get a termination notification from the OS.