NSUserDefaults的使用规则

NSUserDefaults 是iOS中用于保存数据的类之一;

它是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用。

NSUserDefaults支持保存的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

自定义的类如果想要用NSUserDefaults来保存,需要实现NSCoding协议!!!

使用过程

1.写入

//将NSString 对象存储到 NSUserDefaults 中
    NSString *passWord = @"www.baidu.password.com";
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:passWord forKey:@"userPassWord"];

2.读取

   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
  //  将数据取出来,只需要取出key 对应的值就好了,代码如下:
    NSString *readPassWord = [userDefaults objectForKey:@"userPassWord"];
    NSLog(@"%@",readPassWord);

  //注意:对相同的Key赋值约等于一次覆盖,要保证每一个Key的唯一性

******* 重点注意的地方 *******

 NSUserDefaults 存储的对象全是不可变的!!

 例如将NSMutableString 、NSMutableArray、NSMutableDictionary 这样的数据保存在NSUserDefaults 在存储的过程中会自动的把它们的可变性去掉变成成NSString 、NSArray、NSDictionary  所以取出来后他们的数据类型也是转化后的类型!

 NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"123",@"234", nil];
    [userDefaults setObject:mutableArray forKey:@"arrKey"];
    NSLog(@"%@",[userDefaults objectForKey:@"arrKey"]);
    NSMutableArray *mArr = [userDefaults objectForKey:@"arrKey"];
    [mArr addObject:@"789"];
    //程序运行到这的时候会崩溃 reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
    NSLog(@"%@",mArr);

开发者千万别在做项目的时候,写这样sb的代码!!!

原文地址:https://www.cnblogs.com/Mgs1991/p/5140564.html