From 17cc72d5ab62615ae8d1a6fcd8198d5b6e28a2fc Mon Sep 17 00:00:00 2001 From: Yasuhiro Inami Date: Wed, 13 Feb 2013 19:07:56 +0900 Subject: [PATCH] Add synchronous disk-cache loading method. --- SDWebImage/SDImageCache.h | 7 +++++++ SDWebImage/SDImageCache.m | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/SDWebImage/SDImageCache.h b/SDWebImage/SDImageCache.h index 15d3fb9..bd67a04 100644 --- a/SDWebImage/SDImageCache.h +++ b/SDWebImage/SDImageCache.h @@ -94,6 +94,13 @@ typedef enum SDImageCacheType SDImageCacheType; */ - (UIImage *)imageFromMemoryCacheForKey:(NSString *)key; +/** + * Query the disk cache synchronousely. + * + * @param key The unique key used to store the wanted image + */ +- (UIImage *)imageFromDiskCacheForKey:(NSString *)key; + /** * Remove the image from memory and disk cache synchronousely * diff --git a/SDWebImage/SDImageCache.m b/SDWebImage/SDImageCache.m index 0b76ef0..b558e35 100644 --- a/SDWebImage/SDImageCache.m +++ b/SDWebImage/SDImageCache.m @@ -155,6 +155,27 @@ static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week return [self.memCache objectForKey:key]; } +- (UIImage *)imageFromDiskCacheForKey:(NSString *)key +{ + // First check the in-memory cache... + UIImage *image = [self imageFromMemoryCacheForKey:key]; + if (image) + { + return image; + } + + // Second check the disk cache... + UIImage *diskImage = [UIImage decodedImageWithImage:SDScaledImageForPath(key, [NSData dataWithContentsOfFile:[self cachePathForKey:key]])]; + + if (diskImage) + { + CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale; + [self.memCache setObject:diskImage forKey:key cost:cost]; + } + + return diskImage; +} + - (void)queryDiskCacheForKey:(NSString *)key done:(void (^)(UIImage *image, SDImageCacheType cacheType))doneBlock { if (!doneBlock) return;