iOS NSUserdefaults
阿新 • • 發佈:2019-01-01
一、NSUserDefaults簡介
1、NSUserDefaults是資料持久化的一種,可以將少量的資料儲存在本地。其本質是將資料記錄在plist檔案中,當應用被刪除,plist檔案相應的會被刪除,資料也就不存在了。
2、NSUserDefaults是系統提供的一個單例類,通過類方法standardUserDefaults可以獲取NSUserDefaults單例。在專案中,我們可以用NSUserDefaults來儲存跟使用者相關的一些基本資訊,比如頭像、暱稱、電話號碼、地址等。
3、NSUserDefaults其本質是將資料儲存在plist檔案中,所以只能儲存plist檔案支援的資料型別,包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果需要儲存plist檔案不支援的型別,比如說儲存圖片,就需要把圖片歸檔成NSDate型別,再存入plist檔案中。
二、NSUserDefaults基本用法
1、儲存資料
//資料寫入NSUserdefaults
- (void)btnWrite:(id)sender
{
//獲取NSUserDefaults的單例
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//儲存字串型別的資料
[defaults setObject:@"火山" forKey:@"name"];
//儲存字典型別的資料
NSDictionary *dictInfo = @{@"name":@"張三" ,@"age":@"20"};
[defaults setObject:dictInfo forKey:@"dictInfo"];
//儲存陣列型別的資料
NSArray *arr = @[@"1",@"2",@"3"];
[defaults setObject:arr forKey:@"arr"];
//儲存整型型別的資料
[defaults setInteger:20 forKey:@"age"];
//儲存bool型別的資料
[defaults setBool:YES forKey:@"key"];
//儲存float型別的資料
[defaults setFloat:0.123456 forKey:@"price"];
//儲存Double型別的資料
[defaults setDouble:0.1234567123456712 forKey:@"total"];
//儲存url型別的資料
[defaults setURL:[NSURL URLWithString:@"http://www.baidu.com"] forKey:@"url"];
//儲存NSData型別的資料
UIImage *image = [UIImage imageNamed:@"test.jpg"];
NSData *data = UIImageJPEGRepresentation(image, 0.5);
[defaults setObject:data forKey:@"image"];
//儲存NSDate型別的資料
[defaults setObject:[NSDate date] forKey:@"date"];
//強制儲存
[defaults synchronize];
}
2、讀取資料
//從NSUserDefaults讀取資料
- (void)btnRead:(id)sender
{
//獲取NSUserDefaults的單例
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//讀取字串型別的資料
NSString *name = [defaults objectForKey:@"name"];
NSLog(@"%@",name);
//讀取字典型別的資料
NSDictionary *dictInfo = [defaults dictionaryForKey:@"dictInfo"];
//或者 NSDictionary *dictInfo = [defaults objectForKey:@"dictInfo"];
NSLog(@"%@",dictInfo);
//讀取陣列型別的資料
NSArray *arr = [defaults arrayForKey:@"arr"];
// 或者 NSArray *arr = [defaults objectForKey:@"arr"];
NSLog(@"%@",arr);
//讀取bool型別的資料
BOOL value = [defaults boolForKey:@"key"];
NSLog(@"%@",[NSNumber numberWithBool:value]);
//讀取整型型別的資料
NSInteger age = [defaults integerForKey:@"age"];
NSLog(@"%ld",age);
//讀取float型別的資料
float price = [defaults floatForKey:@"price"];
NSLog(@"%f",price);
//讀取double型別的資料
double total = [defaults doubleForKey:@"total"];
NSLog(@"%@",[NSNumber numberWithDouble:total]);
//讀取url型別的資料
NSURL *url = [defaults URLForKey:@"url"];
NSLog(@"%@",url);
//讀取NSData型別的資料
NSData *data = [defaults dataForKey:@"image"];
UIImage *image = [UIImage imageWithData:data];
NSLog(@"%@",image);
//讀取NSDate型別的資料
NSDate *date = [defaults objectForKey:@"date"];
NSLog(@"%@",date);
}
NSUserDefaults非常好用,並不需要使用者在程式中設定NSUserDefaults的全域性變數,需要在哪裡使用NSUserDefaults的資料,那麼就在哪裡建立一個NSUserDefaults物件,然後進行讀或者寫操作。