美文网首页数据储存
iOS 数据存储(四) -持久化 NSUserDefault

iOS 数据存储(四) -持久化 NSUserDefault

作者: 搬砖的crystal | 来源:发表于2022-07-22 15:46 被阅读0次

    一、简介

    NSUserDefault 是单例的,并且是线程安全的,是以键值对的形式保存在沙盒中,最下面还是用 plist 文件进行保存。

    当系统调用 [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@""] 后系统会为用户在沙盒下的 Libray/Preferences 目录下创建 plist 文件,文件名为当前应用的 Bundle Identifier[[NSBundle mainBundle] bundleIdentifier] 用户可以通过 NSUserDefaults 接口的参数获取到该文件夹下的数据。

    因为 NSUserDefaults 存储的数据是写入到 plist 文件的,所以 NSUserDefaults 支持存储的数据有限,包括有
    NSDataNSStringNSNumberNSDateNSArrayNSDictionary 类型的数据。

    二、使用

    1.数据写入

    通常使用 - (void)setObject:(nullable id)value forKey:(NSString *)defaultName; 来设置我们的值,但有些特殊的数据,
    系统也提供了几个便利的设置值方法:

    - (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
    - (void)setFloat:(float)value forKey:(NSString *)defaultName;
    - (void)setDouble:(double)value forKey:(NSString *)defaultName;
    - (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
    

    这里边有一个比较特殊的方法 -setURL:forKey,你可以保存数据的本地地址而不需要直接保存完整数据。

    - (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName
    

    当我们设置数据后,系统并不会立即保存到本地,而是会在一个系统觉得恰当的时间点进行存储,如果我们需要立即存储的话需要调用 - (BOOL)synchronize; 方法来实现。

    2.数据读取

    通常我们调用 - (nullable id)objectForKey:(NSString *)defaultName; 方法来获取我们存储的数据,系统还为我们提供了一些特别的接口供我们使用:

    - (nullable NSString *)stringForKey:(NSString *)defaultName;
    - (nullable NSArray *)arrayForKey:(NSString *)defaultName;
    - (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
    - (nullable NSData *)dataForKey:(NSString *)defaultName;
    - (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName;
    
    - (NSInteger)integerForKey:(NSString *)defaultName;
    - (float)floatForKey:(NSString *)defaultName;
    - (double)doubleForKey:(NSString *)defaultName;
    - (BOOL)boolForKey:(NSString *)defaultName;
    - (nullable NSURL *)URLForKey:(NSString *)defaultName API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
    

    注意点:当我们存储的数据是可变类型时,读取后的数据将变为不可变类型。

    3.数据变化监听

    当我们的 NSUserDefaults 实例所存储的数据变更时,系统会发送 NSUserDefaultsDidChangeNotification 的通知,通知会返回当前更改的 NSUserDefaults 实例对象回来。所以当需要监听某个 NSUserDefaults 数据存储的数据变化时,可以添加该通知的观察者。

    相关文章

      网友评论

        本文标题:iOS 数据存储(四) -持久化 NSUserDefault

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