NSUserDefaults

作者: kangomake | 来源:发表于2019-08-22 11:12 被阅读0次

用来获取设备上的所有的NSUserDefaults的设置。
NSDictionary* defaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
NSLog(@"Defaults: %@", defaults);

一、存储位置

Library/Preference:
iOS系统是以一个.plist文件来统一管理这些使用NSUserDefaults保存的key-value的
我们可以验证一下:在代码当中执行NSHomeDirectory()并打印,复制,然后在Finder->前往->前往文件夹中粘贴前往,或者才终端中执行"cd 刚才复制的路径"->"open ."来前往所在沙盒路径。其中NSUserDefaults就保存在/Library/Preference中的plist文件。

image.png
二、存取方式
存:
    - setObject:forKey:
    - setFloat:forKey:
    - setDouble:forKey:
    - setInteger:forKey:
    - setBool:forKey:
    - setURL:forKey:
取:
    - objectForKey:
    - URLForKey:
    - arrayForKey:
    - dictionaryForKey:
    - stringForKey:
    - stringArrayForKey:
    - dataForKey:
    - boolForKey:
    - integerForKey:
    - floatForKey:
    - doubleForKey:
    - dictionaryRepresentation

移除方式:
     - removeObjectForKey:  
/**
 数据写入沙盒的Library/Preference下,建议只保存应用的所有偏好设置

 @param obj obj
 @param key Key
 */
+ (void)userDefaultSetObjectWithObj:(id)obj
                                key:(NSString *)key
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:obj forKey:key];
    
    //  同步数据
    [userDefaults synchronize];
}


/**
 数据读取
 
 @param key Key
 @return value
 */
+ (id)userDefaultGainObjectWithKey:(NSString *)key
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    id value = [userDefaults objectForKey:key];

    return value;
}
三、支持的数据类型

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

四、其他注意

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

2.数据是明文存储在 plist 文件中,不安全,即使只是修改一个 key 都会 load 整个文件,数据多加载慢(IO 内存),不适合存储大量数据
它是单例的,也是线程安全的,是以键值对 key-value 的形式保存在沙盒中
userDefault过大对启动时间的影响是指数性的,所以值得关注。
解决:每次操作userDefault,都把userDefault中不相干的key 清理。

相关文章

网友评论

    本文标题:NSUserDefaults

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