在iOS中清除内存警告上的url缓存

时间:2012-11-27 11:39:07

标签: iphone ios didreceivememorywarning nsurlcache

在收到内存警告时清除共享NSURLCache是一个好习惯吗?像这样:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
}

我是否正确地认为这也会不必要地清除磁盘缓存?

如果是这样,可以只清除内存缓存?

1 个答案:

答案 0 :(得分:4)

当存在内存警告时,您只需要清除内存缓存而不是磁盘缓存。 removeAllCachedResponses的问题在于它将清除这两个问题。从我的测试来看,这似乎只是在内存缓存中清除。

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {

    NSURLCache * const urlCache = [NSURLCache sharedURLCache];
    const NSUInteger memoryCapacity = urlCache.memoryCapacity;
    urlCache.memoryCapacity = 0;
    urlCache.memoryCapacity = memoryCapacity;
}

我唯一关心的是线程问题。 this文章的底部有一个脚注。

  

StackOverflow上有很多关于通过重新创建它来清除NSURLCache的建议,但是,我们已经看到这会导致在重新创建缓存时在另一个线程上发生请求时偶然发生崩溃。因此,我们的建议是在应用程序启动时创建一次缓存,并在适当时清除它。

上述解决方案不会重新创建缓存,但它可能仍会遇到同样的问题,我没有对此进行过广泛的测试。