2012-01-26 105 views

回答

3

你應該注視NSCache

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSCache_Class/Reference/Reference.html

的NSCache對象是一個集合類的容器,或高速緩存,這 保存鍵 - 值對,類似的NSDictionary類。開發人員通常將緩存合併到臨時存儲對象中,這些對象的創建過程非常昂貴。重用這些對象可以提供 的性能優勢,因爲它們的值不必重新計算 。但是,這些對象對於應用程序 並不重要,如果內存不足,可以將其丟棄。如果丟棄,則需要重新計算它們的值 。

1

取決於數據

二進制數據(文件)類型:
- 使用NSFileManagerNSData writeToFile:

數據的小ammounts(ASCII/UTF8)緩存緩存文件夾中的文件
- 使用NSUserDefaults

用於數據的大ammounts(ASCII/UTF8)
- 使用sqlite3數據庫

0

這取決於您要緩存多少數據,以及一旦您緩存了多少數據,以及您將如何訪問它以及一堆其他緩存管理問題。

如果您有少量數據,可以將其存儲在字典或數組中,然後將其寫入並讀入。但是,如果您有大量數據,這種解決方案可能會變得緩慢;這些讀寫操作可能需要很長時間。並且將髒緩存清理到磁盤意味着寫入整個對象。

您可以編寫單個文件,但是如果您有很多文件可能會成爲性能問題,也是如此。

另一種選擇是使用CoreData。如果你有很多數據(比如說很多對象),那麼定義那些看起來像CoreData實體的東西是有意義的。然後,只需要存儲和獲取對象,如果數據不是本地的,則會退回到從Web服務獲取(然後緩存)。您還可以使用CoreData輕鬆高效地優化其他緩存管理任務(如過期未使用的條目)。

我其實走了這條路,有幾個不同的應用程序。我從一個NSDictionary開始,並且變得很慢。我轉而使用CoreData,這不僅簡化了我的許多代碼以進行緩存初始化和管理,而且使應用程序在此過程中獲得了性能提升。

0

如果您使用NSURLConnection的,或使用的NSURLRequest什麼,緩存已經是照顧你:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-169425

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Concepts/CachePolicies.html#//apple_ref/doc/uid/20001843-BAJEAIEE

默認情況下,這些使用的緩存策略該協議對於Web服務來說就是它返回的HTTP頭。 ASIHttpRequest的IIRC也是如此。

核心數據還實現了自己的行和對象緩存,效果很好。因此,這裏的現實是,當涉及到這些事情時,您實際上不需要擔心緩存 - 它正在優化對NSDateFormatter等事物的使用,這些事情開始變得重要(它們創建起來非常昂貴,而不是線程安全等。 ..)

而且如果有疑問,請使用儀器查找瓶頸和延遲