我在我的iOS应用程序中实现了一个缓存,可以将图像下载到RAM中。
我做了一些研究,发现了一些代码,但大多数都用于将图像缓存到永久存储。
我尝试了NSCache
,但无法满足我的需求。
要求是:
我不确定确切的词,但我认为它应该被称为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)
}
}
现在的问题是,我不确定天气这是正确/有效的解决方案。任何人都有更好的想法/解决方案吗?
答案 0 :(得分:2)
您对密钥顺序的假设肯定是不正确的。未指定NSDictionary
中的键的顺序,索引0处的键和值不必是最旧的键。您应将每个图像的创建日期存储在将它们放入缓存字典的方法中。
除此之外,其余代码似乎都有效。