在iOS中清除内存中的URLcaching警告

收到内存警告时清除共享的NSURLCache是否是一个好习惯? 像这样的东西:

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

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

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

当出现内存警告时,您只需清除内存caching而不是磁盘caching。 removeAllCachedResponses的问题是它将清除这两个。 从我的testing中,这似乎只清除了内存caching。

 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { NSURLCache * const urlCache = [NSURLCache sharedURLCache]; const NSUInteger memoryCapacity = urlCache.memoryCapacity; urlCache.memoryCapacity = 0; urlCache.memoryCapacity = memoryCapacity; } 

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

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

上述解决scheme不会重新创buildcaching,但它可能仍然遭受同样的问题,我没有广泛的testing。