当收到内存警告时清除共享NSURLCache
是否是一种好习惯?类似这样的:清除内存中的URL缓存警告在iOS中
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
我正确地认为这也会不必要地清除磁盘缓存吗?
如果是这样,有可能只清除内存缓存?
当收到内存警告时清除共享NSURLCache
是否是一种好习惯?类似这样的:清除内存中的URL缓存警告在iOS中
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
我正确地认为这也会不必要地清除磁盘缓存吗?
如果是这样,有可能只清除内存缓存?
当出现内存警告时,您只需清除内存缓存而不是磁盘缓存。 removeAllCachedResponses
的问题是它将清除两者。从我的测试中,这似乎清楚了内存缓存。
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
NSURLCache * const urlCache = [NSURLCache sharedURLCache];
const NSUInteger memoryCapacity = urlCache.memoryCapacity;
urlCache.memoryCapacity = 0;
urlCache.memoryCapacity = memoryCapacity;
}
我唯一关心的是线程问题。 this文章底部有一个脚注。
有StackOverflow上很多的建议,关于通过重新创建它净化NSURLCache,然而,我们当请求,同时缓存正在重建另一个线程上发生见过这导致偶尔的崩溃。因此,我们的建议是在应用程序启动时创建一次缓存,并在适当时清除缓存。
上述解决方案不会重新创建缓存,但它可能仍然存在同样的问题,我没有广泛地测试过。
有趣。谢谢@Robert! – hpique
'URLCache.shared.currentMemoryUsage'在您的代码提供相同的值之前和之后,因此将'memoryCapacity'设置为'0'似乎不起作用。另一方面,在'URLCache.shared.removeAllCachedResponses()'后,'currentMemoryUsage'设置为'0' – rafalkitta
我不这么认为,你应该清除图像缓存。 –
@RajanBalana如何清除图像缓存? – zt9788
@ zt9788你找到了清除图像缓存的方法吗? –