2012-11-27 134 views
3

當收到內存警告時清除共享NSURLCache是否是一種好習慣?類似這樣的:清除內存中的URL緩存警告在iOS中

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

我正確地認爲這也會不必要地清除磁盤緩存嗎?

如果是這樣,有可能只清除內存緩存?

+0

我不這麼認爲,你應該清除圖像緩存。 –

+0

@RajanBalana如何清除圖像緩存? – zt9788

+0

@ zt9788你找到了清除圖像緩存的方法嗎? –

回答

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,然而,我們當請求,同時緩存正在重建另一個線程上發生見過這導致偶爾的崩潰。因此,我們的建議是在應用程序啓動時創建一次緩存,並在適當時清除緩存。

上述解決方案不會重新創建緩存,但它可能仍然存在同樣的問題,我沒有廣泛地測試過。

+0

有趣。謝謝@Robert! – hpique

+0

'URLCache.shared.currentMemoryUsage'在您的代碼提供相同的值之前和之後,因此將'memoryCapacity'設置爲'0'似乎不起作用。另一方面,在'URLCache.shared.removeAllCachedResponses()'後,'currentMemoryUsage'設置爲'0' – rafalkitta