2011-06-22 20 views
13

有人可以簡單地向我解釋什麼時候需要使用NSCache?我閱讀文檔,但我不明白。就像,給我舉一個NSCache會有用的場景的例子吧? 謝謝。什麼是NSCache?

+0

你爲什麼要問?你想用它做什麼?是什麼讓你看着它?簡而言之,你想要解決什麼問題? –

+1

正在瀏覽文檔中的類列表,並發現它。發現它有趣...沒有特別的原因。 – sumderungHAY

回答

16

這或多或少就像一本字典,具有以下附加的東西(如由文檔中提到):

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

您可以從不同的 線程中添加,刪除和查詢緩存中的項目,而無需自行鎖定 緩存。

從NSCache對象中檢索某些內容會返回一個自動發佈的 結果。

與NSMutableDictionary對象不同,緩存不會複製放入其中的對象 對象。

如果您的應用程序有大量需要使用的數據,但您無法將其全部保留在內存中,您可能會使用它。例如,如果您有一個從SQL Lite數據庫或Web服務提取數據的應用程序,則可以在查看它之後將其存儲在NSCache中。然後,當您再次需要它時,您可以先檢查緩存,並且只有在數據庫不在緩存中時才需要訪問該緩存。在這種情況下,使用普通字典的主要優點是,如果你在緩存中放了太多東西,並且它開始填滿內存,它會自動丟棄一些東西來爲你釋放內存。

+0

謝謝你,現在很清楚。 – sumderungHAY

+0

這是非常有趣的,它不復制密鑰,我假設這意味着密鑰可能會改變後,它有一個奇怪的暗示,比較關鍵地址或哈希值。推測仍然是哈希。我必須考慮我可以在哪裏使用它。除了使用非NSCopying符合的密鑰。 –

+1

有趣的是,我用來從本地sql數據庫中檢索27k條目,現在使用NSCache只需不到一秒而不是整整5秒。謝謝你 – Eugene