如题
SDImageCache *imageCache= [[SDImageCache alloc] initWithNamespace:@"mynamespace"];
这一句是缓存目录对象
然后提供了一个方法
[imageCache queryDiskCacheForKey:url done:^(UIImage *image, SDImageCacheType cacheType) {}];
这是查找自己的缓存目录
这样确实能查找出图片 可是性能上有问题 这一句是查找的物理磁盘上的 并没有从内存中查找 性能上不是最好 那有没有什么方法能直接从内存中查找
我说一下我的业务 现在业务需要缓存两部分 一部分直接用sd的可以直接解决 另一部分是缓存后不能清除的 要自己管理 这时我就建了另一个缓存目录 可是我翻源码发现 只能从物理磁盘上取图片 这样性能不爽 那有没有什么方法能直接从内存中查找 真心求解答!!
大家讲道理2017-04-18 09:27:15
The following method has low scalability, and other developers need to know the new class method.
So, it is recommended to inherit SDImageCache and rewrite some methods inside. This can be done transparently to unrelated developers.
You can refer to the code below to solve the problem.
@interface SDImageCache (Sun)
+ (UIImage *)imageFromMemoryCacheForKey_v2:(NSString *)key;
+ (UIImage *)imageFromDiskCacheForKey_v2:(NSString *)key;
@end
@implementation SDImageCache (Sun)
+ (instancetype)sunImageCaceh {
static SDImageCache *imageCache;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
imageCache = [[SDImageCache alloc] initWithNamespace:@"posters"];
imageCache.maxCacheSize = 1024*30*1024;
});
return imageCache;
}
+ (UIImage *)imageFromMemoryCacheForKey_v2:(NSString *)key {
UIImage *memoryImage = [[SDImageCache sunImageCaceh] imageFromMemoryCacheForKey:key];
if(!memoryImage) {
memoryImage = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:key];
}
return memoryImage;
}
+ (UIImage *)imageFromDiskCacheForKey_v2:(NSString *)key {
UIImage *diskImage;
diskImage = [[SDImageCache sunImageCaceh] imageFromDiskCacheForKey:key];
if(!diskImage) {
diskImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key];
}
return diskImage;
}
@end
@interface sun : NSObject
@end
@implementation sun
- (void)loadImage {
NSString *imagePath = [HUWebImage cacheImagePath:@"posters"];
NSString *cachePathForKey = [HUWebImage cachePathForKey:url inPath:imagePath];
UIImage *image;
image = [SDImageCache imageFromMemoryCacheForKey_v2:cachePathForKey];
if(!image) {
image = [SDImageCache imageFromDiskCacheForKey_v2:cachePathForKey];
}
if(!image) {
NSURL *imageURL = [NSURL URLWithString:i];
// 网络下载
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL options:SDWebImageLowPriority | SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {} completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if(image && finished && data) {
// 根据需求存入不同的磁盘
[imageCache storeImage:image forKey:url toDisk:true];
[[SDImageCache sharedImageCache] storeImage:image forKey:url toDisk:true];
}
}];
}
}
@end