-1
我在我的iOS應用程序中實現了一個緩存,這將保持圖像下載到RAM中。緩存動態內存中保存圖像iphone
我做了一些研究,發現了一些代碼,但其中大部分是用於將圖像緩存到永久存儲。我試過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)
}
}
現在的問題是,我不知道天氣這是正確的/有效的解決方案。任何人有更好的主意/解決方案?
這正是我心中所懷疑的。我看到圖片在列表中的隨機位置再次下載。我不確定。現在考慮爲所有圖像對象添加創建日期,但似乎並不容易:\。謝謝! –
@AbdullahUmer這真的很簡單。不要直接將圖像添加到字典中,而要添加另一個字典,其中帶有「圖像」和「日期」鍵。然後你可以搜索創建日期。 – 2013-01-01 12:17:25
這給了我另一個想法。而不是創建日期和保存字典。爲什麼不把鍵添加到arrayOfKeys。當達到極限時,我得到索引0處的密鑰,並從緩存中除去圖像以及數組中的密鑰。你怎麼看? @ H2CO3 –