2011-12-19 58 views
0

我一直使用應用程序委託接口變量通過我的應用程序來快速訪問應用程序的寬數據位。Obj-C,我應該如何使用NSUserDefaults輕鬆/高效地訪問整個應用程序/視圖的設置?

我相信這是導致我的應用程序效率問題。我終於決定轉移到NSUserDefaults。除非你有其他建議嗎?

通常我會希望通過一個視圖訪問同一個變量,因此每次使用NSUserDefaults訪問此變量都沒有意義。我認爲它會很慢。

所以我在想一個類將讀取所有的值到一個類型的數組中,在viewDidLoad中,然後如果一個值被改變,保存/同步和更新類變量。

但是,如果我推到一個視圖,我想我將不得不保存。

這聽起來有點亂。

但是,我只是想知道什麼方法將是高效和易於使用?

+1

它不慢訪問'NSUserDefaults',它只是一個'NSDictionary'即自動保存每兩秒鐘。因此,繼續使用'NSUserDefaults'而不是緩存值是很好的。 – 2011-12-19 19:32:15

+0

我懷疑NSUserDefaults的使用在應用程式產生任何效率問題。您可以在從一個視圖控制器轉換到另一個視圖控制器的時間內,從默認存儲區添加/讀取數千個值。你有沒有分析你的應用程序,看看瓶頸在哪裏? – kubi 2011-12-19 21:29:11

回答

0

這實際上取決於您訪問的數據的大小。將多個NSDictionary對象序列化到磁盤可能足以導致您的應用程序滯後。

如果您對iOS開發非常認真,您應該學會使用Core Data。任何NSUserDefaults可以做的事情,核心數據都會更好。 NSUserDefaults提供的唯一優勢是減少了一次性應用程序中的代碼行。考慮核心數據就像爲房子奠定基礎,而NSUserDefaults喜歡搭建帳篷。

+0

難道是確定的,如果我創建像...'+(無效)的一些功能storeSetting:(的NSString *)設置:(的NSString *)值;'和'+(的NSString *)retrunSetting:(的NSString *)設置;' ? – Jules 2011-12-19 20:12:35

0

如果你需要使用像數組或者集合這樣的變量,你最好不要使用NSUserDefaults,因爲在同步時它們將所有存儲值保存到磁盤上(當然如果你不需要將它們存儲到磁盤上的話)。如果你需要大量的對象圖數據的存儲與這樣的

User 
-name 
-lastname 
-email 
-messages 
Message 
-date 
-text 

關係那你最好開始尋找到CoreData框架,它是非常容易使用,可以儲存大量的數據集磁盤和訪問他們很快。

如果你只需要一些類,例如存儲當前的用戶配置文件值,如用戶名,電子郵件等。嘗試創建一個單例類 - 這與使用AppDelegate非常相似,但是當你使用它時會更清晰將你的數據分成更小的塊。

反正我根據我的假設只寫了這個答案。很高興知道您正在使用的數據類型以及您的應用程序的生命週期是什麼。

1

共享模型對象(使用MVC範例)是將變量共享給多個其他對象或類的常用推薦方法。這個Model對象可以是一個單例,或者其他對象可以在本地複製或委派一個對單個Model對象的引用,以便快速訪問其getter/setter。

最快的變量訪問方法通常只是使用C全局變量(因爲常規C是Objective C的一個子集),如果你願意處理可能更困難的代碼重用和調試問題。

NSUserDefaults只是使用文件系統作爲鍵值字典全局變量。慢,並且與C全局變量使用相同的結構問題。

相關問題