NSUserDefaults 是iOS Foundation 框架提供的一種用於存儲管理單例。ios
經過NSData能夠存儲大部分類型的文件,例如要存儲一張圖片能夠先把圖片轉爲NSData。objective-c
// Create instances of NSData
NSData *imageData = UIImageJPEGRepresentation(contactImage, 100);
// Store the data
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:imageData forKey:@"image"];
複製代碼
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:9001 forKey:@"HighScore"];
[defaults synchronize];
複製代碼
// Get the stored data before the view loads
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *imageData = [defaults dataForKey:@"image"];
UIImage *contactImage = [UIImage imageWithData:imageData];
複製代碼
- setBool:forKey:
- setFloat:forKey:
- setInteger:forKey:
- setDouble:forKey:
- setURL:forKey:
複製代碼
對於存儲Bool類型值,取值的時候須要注意使用Bool變量來接住,而不是直接判斷對[[NSUserDefaults standardUserDefaults] boolForKey:],直接判斷表示[NSUserDefaults standardUserDefaults] 是否能取到對應的Key值,YES表示has value,NO表示no value。數據庫
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:APP_IS_FIRST_SESSION_ID];
BOOL flag = [[NSUserDefaults standardUserDefaults] boolForKey:APP_IS_FIRST_SESSION_ID];
//這裏的Flag爲YES
if ([[NSUserDefaults standardUserDefaults] boolForKey:APP_IS_FIRST_SESSION_ID]) {
//直接對取值判斷,將老是True,這個表明[NSUserDefaults standardUserDefaults]能取到值
}
複製代碼
user defaults數據庫中實際上是由多個層級的域組成的,當你讀取一個鍵值的數據時,NSUserDefaults從上到下透過域的層級尋找正確的值,不一樣的域有不一樣的功能,有些域是可持久的,有些域則不行。app
注意須要在每次啓動app而且沒有在user defaules中讀取數據的時候調用以上方法,由於registerDefaults:不能把這些默認數據存儲到硬盤上,因此application:didFinishLaunchingWithOptions是最合適的地方。框架
NSURL *defaultPrefsFile = [[NSBundle mainBundle]
URLForResource:@"DefaultPreferences" withExtension:@"plist"];
NSDictionary *defaultPrefs = [NSDictionary dictionaryWithContentsOfURL:defaultPrefsFile];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPrefs];
複製代碼
這樣作的緣由是:默認狀況下,應用域是空的,沒見鍵也沒有值。當應用第一次設置某項用戶偏好設置的值時,相應的值會經過指定的鍵加入應用域。當經過NSUserDefaults獲取某項用戶偏好設置的值時,NSUserDefaults會先在應用域中查找,若是找到了值,NSUserDefaults就會返回這個值。若是沒有找到,NSUserDefaults就會在註冊域中查找並返回默認值。 user defaults數據庫中實際上是由多個層級的域組成的,當你讀取一個鍵值的數據時,NSUserDefaults從上到下透過域的層級尋找正確的值,不一樣的域有不一樣的功能,有些域是可持久的,有些域則不行。dom
文章參考: oleb.net/blog/2014/0… developer.apple.com/reference/f… www.ios-blog.co.uk/tutorials/o…spa