美文网首页iOS基础知识
NSUserDefaults的使用

NSUserDefaults的使用

作者: 狂暴的小蜗牛 | 来源:发表于2020-08-12 11:31 被阅读0次

    什么是NSUserDefaults

    NSUserDefaults用来存储 用户设置 系统配置等一些小的数据。
    因为数据是明文存储在 plist 文件中,不安全,即使只是修改一个 key 都会 load 整个文件,数据多加载慢(IO 内存),不适合存储大量数据。
    它是单例的,也是线程安全的,是以键值对 key-value 的形式保存在沙盒中
    存储路径为:沙盒路径的Library——>Preferences文件夹中

    相当于全局的变量

    支持的数据类型:NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型,如果要存放其他数据类型或者自定义的对象(如自定义的类对象),则必须将其转换成NSData存储。即使对象是NSArray或NSDictionary,他们存储的类型也应该是以上范围包括的。
    在进行自定义对象的归档时需要实现NSCoding协议,不实现协议方法则抛出异常,类似于序列化与反序列话,获得的对象都是不一致的。
    NSUserDefaults返回的值是不可改变的,即使存储的时候是可变的值。
    对相同的Key赋值约等于一次覆盖。

    保存数据的方式

    -setObject:forKey:
    - setFloat:forKey:
    - setDouble:forKey:
    - setInteger:forKey:
    - setBool:forKey:
    - setURL:forKey:
    
    例如
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    [userDefault setObject:@"admin"forKey:@"user_name"];
    
    UIImage *image =[UIImage imageNamed:@"somename"];
    NSData *imageData = UIImageJPEGRepresentation(image, 100);
    //把image归档为NSData
    [userDefault setObject:imageData forKey:@"image"];
    [userDefault synchronize];
    
    
    //保存数据:保存UIcolor类型的,超出上面的5种数据类型,就要进行归档,把它们归档成data类型的数据之后再保存。
    NSData *objColor = [NSKeyedArchiver archivedDataWithRootObject:[UIColor redColor]];
    [[NSUserDefaults standardUserDefaults] setObject:objColor forKey:@"myColor"];
    

    读取数据的方式

    - objectForKey:
    - URLForKey:
    - arrayForKey:
    - dictionaryForKey:
    - stringForKey:
    - stringArrayForKey:
    - dataForKey:
    - boolForKey:
    - integerForKey:
    - floatForKey:
    - doubleForKey:
    - dictionaryRepresentation
    例如
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    [userDefault objectForKey:@"user_name"];
    

    删除数据的方式

    - removeObjectForKey:
    

    立即写入 synchronize

    NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘:

    如下
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    [userDefault synchronize];
    

    相关文章

      网友评论

        本文标题:NSUserDefaults的使用

        本文链接:https://www.haomeiwen.com/subject/ivypdktx.html