NSUserDefaults是單例類。數據庫
單例類:是單例模式的一個實例,而模式單例是一種常見的編程方式。在iOS中,單例模式很常見,它用於確保特定類只有一個實例。單例最經常使用於表示硬件或者操做系統嚮應用程序提供的服務。編程
NSUerDefaults類提供了一個默認的 系統編程接口進行交互,能夠說是最簡單的存儲方式之一,通常用來存儲應用程序相關的偏好設置,配置數據等,以便於下次啓動程序以後能恢復上次的設置。並且它能夠在程序的任何地方存儲和讀取數據。在運行時,可使用NSUerDefaults對象讀取應用程序的默認數據庫來獲取數據。NSUerDefaults具備緩存機制,因此沒必要再每次讀取數據的時候都打開應用程序的默認設置數據庫。能夠經過synchronize方法來使內存中的緩存與系統默認數據庫進行同步。緩存
NSUerDefaults有限制,他通常用於存儲單條數據,好比程序設置信息,而大量的條目數據通常使用數據庫,大文件的數據則使用文件存儲方式。ui
對象歸檔(NSKeyedArchiver)是將內存中的對象實例保存成磁盤而且能夠逆向這個過程以保存用戶操做狀態等,他的用處很大,可是用起來比較麻煩,須要在程序設計的時候就把每一個類實現NSCoding協議功能。url
能夠經過NSUerDefaults單例來建立一個NSUerDefaults對象,給對象是全局變量,能夠在整個項目中使用。代碼以下:操作系統
var uerDefaults = NSUerDefaults.standardUserDefaults()
也能夠經過初試化方法init?(suiteName suitename: String)
來建立一個新的NSUSerDefaults對象,參數suitename表明對象的組名稱.net
var userDefaults = NSUserDefaults(suiteName: "SwiftClass")
NSUserDefaults類提供了一些很是方便的方法來設置和獲取經常使用的數據類型,例如Int,Float,Double,Bool,NSURL。具體使用:設計
//Int類型 //設置 userDefaults.setInteger(123456,forKey:"Int") //讀取 var intValue = userDefaults.integerForKey("Int") //Float 類型 //設置 userDefaults.setFloat(3.2,forKey:"Float") //讀取 var floatValue = userDefaults.floatForKey("Float") //Double類型 //設置 userDefaults.setDouble(5.6890,forKey:"Double") //讀取 var doubleVaule = userDefaults.doubleForKey("Double") //Bool類型 //設置 userDefaults.setBool(true,forKey:"Boole") //讀取 var boolValue= userDefaults.boolForKey("Boole") //NSURL類型 //設置 userDefaults.setURL(NSURL(string:"http://dowhile.net"),forKey:"NSURL") //讀取 var urlValue = userDefaults.URLForKey("NSURL")
若是想要刪除NSUserDefaults實例對象全部設置的值,咱們須要獲取到全部的Key,而後使用removeObjectForyKey方法進行遍歷刪除。code
var ar:NSDictionary = userDefaults.dictionaryRepresentation() for key in ar.allKeys{ userDefaults.removeObjectForKey(key as String) userDefaults.synchronize()//內存中數據同步更新數據庫 }
你也許會有疑問,這些數據到底存儲在了那裏呢?對象
其實它存儲在應用程序內置的一個plist文件裏,這個能夠根據路徑看到。
好比說這個是你的程序沙盒位置
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(這個是應用程序對應在mac上的位置)
在你的/Library/Prefereces,裏面有個plist文件,存儲的就是你的userDefaults