NSCache objectForKey:在iOS 8上总是返回零后的内存警告

我遇到了一个问题,只发生在iOS 8上。我用NSCache来存储我的图像。 在收到内存警告后,我会重新获取图像并存储到caching中。 但是,警告后caching不能再存储我的图像。 它通过使用objectForKey:总是返回给我。
这是我的代码的一部分:

  @interface ViewController () { NSCache *imageCache; } @implementation ViewController - (instancetype)init { self = [super init]; if (self) { imageCache = [[NSCache alloc] init]; [imageCache setTotalCostLimit:1024 * 1024 * 1]; } return self; } - (void)imageDownloadManager:(ImageDownloadManager *)manager didReceiveImage:(UIImage *)image forObjectID:(NSString *)objecID { NSUInteger cost = [UIImageJPEGRepresentation(image, 0) length]; image = [image smallImageWithCGSize:kImageThumbSize]; [self.imageCache setObject:image forKey:objectID cost:cost]; NSLog("image: %@",[self.imageCache objectForKey:objectID]); //return nil } @end 

谢谢 :)

解决scheme

您必须设置countLimit并且该值必须大于0.然后,您也可以使用totalCostLimit

我遇到了同样的问题(只有在iOS 8.1下),并通过分配一个countLimit而不是totalCostLimit来得到它的工作。

 // getter - (NSCache *)cache { if (!_cache) { _cache = [[NSCache alloc] init]; _cache.countLimit = aLimit; } return _cache; }