按下主页按钮后NSCache到期

时间:2014-03-13 02:57:25

标签: ios nscache

我使用NSCache实现一个自定义类来缓存一些文章

我发现了一个问题,就是在模拟器上按下主页按钮时,缓存的数据似乎消失了

它将从网络加载数据,但不加载缓存

如果没有点击主页按钮,它将从NSCache

获取数据

即。我的缓存代码:

#import "ArticleCache.h"

@implementation ArticleCache

static NSCache *Cache;

+ (void)initialize
{
    [super initialize];

    Cache = [[NSCache alloc] init];
    [Cache setCountLimit: 1000];
}

+ (void)cacheResponse:(NSData *)response forURL:(NSURL *)URL
{
    [Cache setObject:response forKey:URL];
}

+ (NSData *)cachedResponseForURL:(NSURL *)URL
{
    return [Cache objectForKey:URL];
}

@end

//难道你们不是发现这个问题就像一首诗,至少是最后一个字符和每行的第一个字符是相同的。

3 个答案:

答案 0 :(得分:0)

这是NSCache的预期行为。如果您想要清除缓存并从服务器再次提取数据,或者当应用程序要进入后台时将其保存在其他位置,则由您和您的设计决定。

答案 1 :(得分:0)

而不是缓存NSData对象,而是缓存NSPurgeableData对象。在您的+(void)cacheResponse:(NSData *)响应forURL:(NSURL *)URL中,从响应创建一个NSPurgeableData对象并存储它。

+ (void)cacheResponse:(NSData *)response forURL:(NSURL *)URL
{
    [Cache setObject:[NSPurgeableData dataWithData:response] forKey:URL];
}

答案 2 :(得分:0)

只是为了让它更清晰......引用NSCache文档,第三段:

  

NSCache对象在几个方面与其他可变集合不同:

     
      
  • NSCache类包含各种自动删除策略,可确保它不会占用太多的系统内存。该   如果需要内存,系统会自动执行这些政策   其他应用。调用时,这些策略会删除一些项目   从缓存中减少内存占用。
  •   
  • 您可以从不同的线程添加,删除和查询缓存中的项目,而无需自行锁定缓存。
  •   
  • 从NSCache对象中检索内容会返回自动释放的结果。
  •   
  • 与NSMutableDictionary对象不同,缓存不会复制放入其中的密钥对象。
  •   
     

这些功能对于NSCache类是必需的,因为缓存可能   决定在幕后异步自动变异   如果它被调用以释放内存。

换句话说,你永远不知道什么时候会删除这些对象。