我正在我的 iOS 应用程序中实现一个缓存,它将图像下载到 RAM 中。
我做了一些研究并找到了一些代码,但其中大部分是用于将图像缓存到永久存储。
我尝试过NSCache
,但无法满足我的需要。
要求是:
- 限制保存图像。例如 100。
- 当达到缓存限制时,它应该在添加新图像之前删除大多数插入的旧图像。
我不确定确切的词,但我认为它应该被称为 FIFO 缓存(先进先出)。
经过一番研究,我做了以下实现。
static NSMutableDictionary *thumbnailImagesCache = nil;
+ (UIImage *)imageWithURL:(NSString *)_imageURL
{
if (thumbnailImagesCache == nil) {
thumbnailImagesCache = [NSMutableDictionary dictionary];
}
UIImage *image = nil;
if ((image = [thumbnailImagesCache objectForKey:_imageURL])) {
DLog(@"image found in Cache")
return image;
}
/* the image was not found in cache - object sending request for image is responsible to download image and save it to cache */
DLog(@"image not found in cache")
return nil;
}
+ (void)saveImageForURL:(UIImage *)_image URLString:(NSString *)_urlString
{
if (thumbnailImagesCache == nil) {
thumbnailImagesCache = [NSMutableDictionary dictionary];
}
if (_image && _urlString) {
DLog(@"adding image to cache")
if (thumbnailImagesCache.count > 100) {
NSArray *keys = [thumbnailImagesCache allKeys];
NSString *key0 = [keys objectAtIndex:0];
[thumbnailImagesCache removeObjectForKey:key0];
}
[thumbnailImagesCache setObject:_image forKey:_urlString];
DLog(@"images count in cache = %d", thumbnailImagesCache.count)
}
}
现在的问题是我不确定这是正确/有效的解决方案。有人有更好的想法/解决方案吗?