2012-07-27 102 views
0

我正在使用創建並存儲在我的應用程序委託中的ARC和NSCache。然後我通過應用程序委託從控制器調用它。 NSCache在從url加載圖像時存儲圖像,並且內存使用情況非常迅速。當我檢查分析器的真實內存使用情況時,我的應用程序的內存使用量甚至達到320 MB,但是在分配上它說它剛剛分配了20-30 MB。NSCache,removeAllObjects是否釋放內存使用?我正在使用ARC

在我的應用程序委託我設置緩存如下(這是伊娃):

cache = [[NSCache alloc] init]; 
[cache setCountLimit:100]; 
[cache setTotalCostLimit:1500000]; 
[cache setEvictsObjectsWithDiscardedContent:YES]; 

我實現了一個按鈕,NSCache實驗,當我點擊它,它要求:

- (IBAction)eraseCache:(id)sender { 
    [[appDelegate cache] removeAllObjects]; 
} 

在剖析器上,使用的內存不會下降,但實際上它開始再次獲取圖像,所以我知道被刪除的對象。我如何使用ARC來隨意釋放這些內存使用情況?如何獲得緩存的大小以知道何時釋放它?

回答

0

在ARC中,一旦沒有指向對象的指針,它就會自動釋放。如果只有指向該對象的指針位於緩存中,則它們已被釋放。

請注意,您實際上不必刪除對象;如果將指針指定給新對象(導致它不再指向舊對象),則舊對象將被釋放。

Ex: 
NSArray *array = [NSArray new]; 
array = [NSArray new]; //the original array gets deallocated because nothing points to it. 

從NSCache類參考:

的NSCache類整合各種自動刪除策略,這 確保它不使用太多系統內存。如果內存需要 其他應用程序, 系統會自動執行這些策略。在調用時,這些策略會從緩存中刪除一些項目 ,從而最大限度地減少內存佔用量。

+0

那麼,爲什麼按下我的「removeAllObjects」按鈕時,內存使用量不會下降?會發生什麼? – clopez 2012-07-27 16:28:36

+0

它可能只是留在內存中,直到操作系統決定再次需要內存爲止。你的應用崩潰了嗎? – Dustin 2012-07-27 16:29:08

+0

是的,你看了太多照片後會崩潰。 – clopez 2012-07-27 16:29:49