I am using the SDWebImage
library to cache web images in my app:
https://github.com/rs/SDWebImage/blob/master/README.md
Current Usage:
SDWebImage does aggressive caching by default. But now they give the option to respect your HTTP caching control headers and get the latest image.
For this they have a new method where in options you can pass SDWebImageRefreshCached
[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/xyz/picture"]
placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
options:SDWebImageRefreshCached];
You can find the complete method details and explanation here.
NSURL *imageUrl = nil;
NSDate *lastUpdate = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastUpdate"];
NSDate *currentDate = [NSDate date];
if (lastUpdate == nil
|| ![lastUpdate isKindOfClass:[NSDate class]]
|| [currentDate timeIntervalSinceDate:lastUpdate] > 60 * 60 *24) {
[[NSUserDefaults standardUserDefaults] setObject:currentDate forKey:@"lastUpdate"];
NSString *urlString = [NSString stringWithFormat:@"http://yourdomain.com/image/image.png?%f", [currentDate timeIntervalSince1970]];
imageUrl = [NSURL URLWithString:urlString];
}
Below is what I have observed.
If the image name/ path is same, SDWebImage will not download it again for 1 week.
Irrespective of Image name, SDWebImage will re-download the image after 1 week (from the time it is downloaded).
static NSInteger cacheMaxCacheAge = 60*60*24*7; // 1 week
They have one Database where all images URL are stored. For them, image URL is like primary key (unique key).
So basically what they do is if the URL is changed and not present in DB, download it.
From my point of view what they are doing is RIGHT. Ex. If you upload image let's say for user A, the image name has to be changed & this is basic. I know some developer prefer image name to be same (like userA.png always).
Latest Swift 3.0* and SDWebImage
SDWebImageManager.shared().imageCache?.deleteOldFiles(completionBlock: nil)