2014-04-14 17 views
0

這是一個相當簡單的問題,但我無法在我的搜索中找到明確的答案。從內存的角度來看,帶有非持久存儲的NSArray和Core Data是如何工作的?

如果我有一個NSArray,並添加五十個1MB UIImage s,那麼從中扣除50MB?該應用程序是否會使用50MB以上的內存?它會將它存儲在磁盤上嗎?

Core Data的情況也是如此,而不是使用持久性存儲,我將它存儲在內存中。核心數據存儲的大小是否佔用了大量的內存/內存,或者它會駐留在磁盤上,並在應用程序執行完成時被擦除?

我很擔心是否我應該在NSArray被存儲在UIImage小號幾十兆,或者我應該使用NSCache(我寧願不,我寧願永遠不會失去任何圖像)。

+0

保留儘可能少的圖像,你可以在內存中。您將使用比原始圖像數據更多的內存。如果你做了一些事情來實現它,它只會被寫入磁盤。 – Wain

回答

0

如果我有一個NSArray,並將50個1MB UIImages添加到它,那麼從中扣除50MB的 在哪裏?該應用程序是否會使用50MB以上的內存?

是的。

它會將它存儲在磁盤上嗎?

編號數組存儲在內存中。

核心數據也是如此,而不是使用持久性存儲 我將它存儲在內存中。核心數據存儲的大小是否會佔用 這麼多的內存/內存,或者它會存在於磁盤上,並在應用程序執行完畢後被擦除 ?

是,如果你告訴核心數據在內存中的故事的一切,這也正是它會做。

如果您考慮到虛擬內存系統可以將實際內存頁面交換到磁盤並在需要時將它們讀回來,那麼「內存」和「磁盤」之間的界限可能會有些模糊。然而,這對於iOS不是問題,因爲iOS doesn't provide a VM backing store和可寫內存永遠不會換出。

我很擔心我是否應該被儲存數十個在UIImages 兆在一個NSArray,或者我應該使用NSCache

這些都不是你唯一的選擇,當然。您可以將圖像存儲在文件中並根據需要進行讀取。當然,您應該仔細考慮您的應用程序使用內存和磁盤空間的方式,但您還需要考慮網絡使用情況,電池使用情況和性能。將數據存儲在磁盤上通常比再次下載數據更可取,因爲下載需要時間,可能會影響用戶的數據計劃,並且比從輔助存儲讀取數據需要更多的精力。

+0

[SDWebImage'](https://github.com/rs/SDWebImage)等庫如何聲明「保證相同的URL不會被多次下載」。下載一次後,URL會發生什麼變化?如果我下載數百張圖像,是否可能使用幾百MB的RAM? –

+0

@DougSmith根據該項目,SDWebImage提供了「具有自動緩存過期處理的異步內存+磁盤映像緩存」。我不認爲這種保證是成立的 - 如果你已經下載了很多圖片,以致你想要的圖片被從緩存中刪除,它將不得不再次下載。 – Caleb

相關問題