iOS使用者喜好設定NSUserDefaults淺析
NSUserDefaults稱為使用者喜好設定,是一個輕量級的資料存放區機制。關於如何使用,請參考《iOS項目開發實戰——使用使用者喜好設定資料API儲存資訊》《iOS項目開發實戰——使用使用者喜好設定資料進行啟動提示》這兩篇部落格。這裡我們要來分析一下NSUserDefaults的其他特性。
首先NSUserDefaults是單例類,是單例模式的一個執行個體。在iOS中,單例模式很常見,它用於確保特定類只有一個執行個體。單例最常用於表示硬體或者作業系統嚮應用程式提供的服務。
NSUserDefaults類提供了一個預設的系統編程介面進行互動,可以說是最簡單的儲存方式之一。一般用來儲存應用程式相關的喜好設定,配置資料等,以便下次啟動程式之後能恢複上次的設定。而且他可以在程式的任何地方儲存和讀取資料,在運行時,可以使用NSUserDefaults對象讀取應用程式的預設資料庫來擷取資料。NSUSerDefaults具有緩衝機制,所以不必在每次讀取資料的時候都開啟應用程式的預設設定資料庫。可以通過synchronize方法來使記憶體中的緩衝與系統預設資料庫進行同步。
當然NSUserDefaults也有自己的局限性,他一般用於儲存單條資料,比如程式設定資訊,而大量的條目資料一般使用資料庫,大檔案的資料使用檔案儲存體方式。
對象歸檔(NSKeyedArchiver)是將記憶體中的對象執行個體儲存成磁碟並且可以逆向這個過程以儲存使用者的狀態。用處很大,但是比較麻煩,需要在程式設計的時候就把每個類實現NSCoding協議的功能。
現在我們來看看NSUserDefaults支援哪些類型,NSNumber(NSInteger,float,double),NSString,NSDate,NSArray,NSDictionary,BOOL. NSUserDedaults也是用索引值對的形式進行儲存的,如果大家瞭解過KVC的話,其實也可以理解NSUserDefaults也是屬於KVC的一種。
那麼現在問題來了,這個儲存的資料到底放在哪裡了呢?資料存放區在了該應用程式的沙箱中。首先看一下部落格《iOS應用沙箱機制淺析》,關於什麼是應用程式沙箱和擷取沙箱位置,我在部落格中有詳細介紹。NSUserDefaults的資料就儲存在沙箱目錄下的 Library/Preferences 檔案夾下的plist檔案。而且如果你現在進行中開發調試的話,你還可以手動修改這個plist檔案,裡面儲存的資料和你通過代碼寫入的是一模一樣的。