Apply a `Thumbnail-` prefix for the cache key for all the thumbnail images, this can avoid cache issue when you query the same URL with different thumbnail size
This commit is contained in:
parent
f376b5da9a
commit
150ad1b104
|
@ -115,7 +115,8 @@
|
|||
cell.customTextLabel.text = [NSString stringWithFormat:@"Image #%ld", (long)indexPath.row];
|
||||
[cell.customImageView sd_setImageWithURL:[NSURL URLWithString:self.objects[indexPath.row]]
|
||||
placeholderImage:placeholderImage
|
||||
options:indexPath.row == 0 ? SDWebImageRefreshCached : 0];
|
||||
options:indexPath.row == 0 ? SDWebImageRefreshCached : 0
|
||||
context:@{SDWebImageContextImageThumbnailPixelSize : @(CGSizeMake(180, 120))}];
|
||||
return cell;
|
||||
}
|
||||
|
||||
|
|
|
@ -95,19 +95,45 @@ static id<SDImageLoader> _defaultImageLoader;
|
|||
}
|
||||
|
||||
- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url {
|
||||
return [self cacheKeyForURL:url cacheKeyFilter:self.cacheKeyFilter];
|
||||
return [self cacheKeyForURL:url context:nil];
|
||||
}
|
||||
|
||||
- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url cacheKeyFilter:(id<SDWebImageCacheKeyFilter>)cacheKeyFilter {
|
||||
- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context {
|
||||
if (!url) {
|
||||
return @"";
|
||||
}
|
||||
|
||||
if (cacheKeyFilter) {
|
||||
return [cacheKeyFilter cacheKeyForURL:url];
|
||||
} else {
|
||||
return url.absoluteString;
|
||||
|
||||
NSString *key;
|
||||
// Cache Key Filter
|
||||
id<SDWebImageCacheKeyFilter> cacheKeyFilter = self.cacheKeyFilter;
|
||||
if (context[SDWebImageContextCacheKeyFilter]) {
|
||||
cacheKeyFilter = context[SDWebImageContextCacheKeyFilter];
|
||||
}
|
||||
if (cacheKeyFilter) {
|
||||
key = [cacheKeyFilter cacheKeyForURL:url];
|
||||
} else {
|
||||
key = url.absoluteString;
|
||||
}
|
||||
// Thumbnail Key Appending
|
||||
NSValue *thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize];
|
||||
if (thumbnailSizeValue != nil) {
|
||||
CGSize thumbnailSize = CGSizeZero;
|
||||
#if SD_MAC
|
||||
thumbnailSize = thumbnailSizeValue.sizeValue;
|
||||
#else
|
||||
thumbnailSize = thumbnailSizeValue.CGSizeValue;
|
||||
#endif
|
||||
|
||||
BOOL preserveAspectRatio = YES;
|
||||
NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio];
|
||||
if (preserveAspectRatioValue != nil) {
|
||||
preserveAspectRatio = preserveAspectRatioValue.boolValue;
|
||||
}
|
||||
NSString *transformerKey = [NSString stringWithFormat:@"Thumbnail({%f,%f},%d)", thumbnailSize.width, thumbnailSize.height, preserveAspectRatio];
|
||||
key = SDTransformedKeyForKey(key, transformerKey);
|
||||
}
|
||||
|
||||
return key;
|
||||
}
|
||||
|
||||
- (SDWebImageCombinedOperation *)loadImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDImageLoaderProgressBlock)progressBlock completed:(SDInternalCompletionBlock)completedBlock {
|
||||
|
@ -188,8 +214,7 @@ static id<SDImageLoader> _defaultImageLoader;
|
|||
// Check whether we should query cache
|
||||
BOOL shouldQueryCache = !SD_OPTIONS_CONTAINS(options, SDWebImageFromLoaderOnly);
|
||||
if (shouldQueryCache) {
|
||||
id<SDWebImageCacheKeyFilter> cacheKeyFilter = context[SDWebImageContextCacheKeyFilter];
|
||||
NSString *key = [self cacheKeyForURL:url cacheKeyFilter:cacheKeyFilter];
|
||||
NSString *key = [self cacheKeyForURL:url context:context];
|
||||
@weakify(operation);
|
||||
operation.cacheOperation = [self.imageCache queryImageForKey:key options:options context:context completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) {
|
||||
@strongify(operation);
|
||||
|
@ -303,8 +328,7 @@ static id<SDImageLoader> _defaultImageLoader;
|
|||
if (context[SDWebImageContextOriginalStoreCacheType]) {
|
||||
originalStoreCacheType = [context[SDWebImageContextOriginalStoreCacheType] integerValue];
|
||||
}
|
||||
id<SDWebImageCacheKeyFilter> cacheKeyFilter = context[SDWebImageContextCacheKeyFilter];
|
||||
NSString *key = [self cacheKeyForURL:url cacheKeyFilter:cacheKeyFilter];
|
||||
NSString *key = [self cacheKeyForURL:url context:context];
|
||||
id<SDImageTransformer> transformer = context[SDWebImageContextImageTransformer];
|
||||
id<SDWebImageCacheSerializer> cacheSerializer = context[SDWebImageContextCacheSerializer];
|
||||
|
||||
|
@ -353,8 +377,7 @@ static id<SDImageLoader> _defaultImageLoader;
|
|||
if (context[SDWebImageContextStoreCacheType]) {
|
||||
storeCacheType = [context[SDWebImageContextStoreCacheType] integerValue];
|
||||
}
|
||||
id<SDWebImageCacheKeyFilter> cacheKeyFilter = context[SDWebImageContextCacheKeyFilter];
|
||||
NSString *key = [self cacheKeyForURL:url cacheKeyFilter:cacheKeyFilter];
|
||||
NSString *key = [self cacheKeyForURL:url context:context];
|
||||
id<SDImageTransformer> transformer = context[SDWebImageContextImageTransformer];
|
||||
id<SDWebImageCacheSerializer> cacheSerializer = context[SDWebImageContextCacheSerializer];
|
||||
BOOL shouldTransformImage = originalImage && (!originalImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)) && transformer;
|
||||
|
|
Loading…
Reference in New Issue