ios - NSCache objectForKey : always return nil after memory warning on iOS 8

标签 ios objective-c ios8 nscache

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

 @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

最佳答案

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

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

关于ios - NSCache objectForKey : always return nil after memory warning on iOS 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27289360/

相关文章:

ios - UISegmentedControl tintColor

ios - 为什么 Slides[i].frame 打印的值与 SlideScrollView.subviews[i].frame 不同

objective-c - 应用程序设计 - 谁应该拥有单例对象

ios - Swift:在 iOS8 中旋转倾斜按钮?

swift - iOS 8 SDK、Swift、MapKit 绘制路线

ios - 无法集成 Firebase iOS SDK - 架构 x86_64 : 的 undefined symbol

ios - 使用第二个 Storyboard时导航 Controller 后退按钮不显示

ios - 单击时如何获取图像的 X 和 Y 坐标(快速)

iphone - 将文档中的 JPG 图像保存到相册 - 示例代码

iphone - 旧项目在 iOS 5 上运行缓慢