1. 程式人生 > >iOS NSUserdefaults

iOS NSUserdefaults

一、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物件,然後進行讀或者寫操作。