3

我遇到了一个只发生在 iOS 8 上的问题。我用NSCache来存储我的图像。收到内存警告后,我会获取图像并再次存储到缓存中。但是,在警告后缓存无法再存储我的图像。它总是通过使用返回 nil 给我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

谢谢 :)

解决方案

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

4

1 回答 1

1

我遇到了同样的问题(并且仅在 iOS 8.1 下)并通过分配 countLimit 而不是 totalCostLimit 使其工作。

// getter
- (NSCache *)cache
{
   if (!_cache) {
      _cache = [[NSCache alloc] init];
      _cache.countLimit = aLimit;
   }
   return _cache;
}
于 2015-03-10T10:26:19.293 回答