[英]Clearing the url cache on memory warning in iOS
在收到內存警告時清除共享的NSURLCache
是一個好習慣嗎? 像這樣的東西:
- (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;
}
我唯一擔心的是線程問題。 有一個在底部的腳注此文章。
關於通過重新創建NSURLCache來清除NSURLCache有很多關於StackOverflow的建議,但是,我們已經看到這會導致在重新創建緩存時在另一個線程上發生請求時偶爾會發生崩潰。 因此,我們建議在應用程序啟動時創建一次緩存,並在適當時清除緩存。
上面的解決方案不會重新創建緩存,但是它可能仍會遇到同樣的問題,我沒有對此進行過廣泛的測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.