数据储存

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

2022-07-22  本文已影响0人  搬砖的crystal

一、简介

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 数据存储的数据变化时,可以添加该通知的观察者。

上一篇下一篇

猜你喜欢

热点阅读