iOS数据持久化UserDefaults封装器使用详解
什么是UserDefaults
UserDefaults 是 iOS 中一种轻量级的数据持久化技术,允许我们在应用程序结束后仍然可以保存一些数据,并在下次应用启动时恢复这些数据。
UserDefaults 使用键值对的方式来存储数据。其本质上是一个plist文件,保存在沙盒中的Library/Preferences目录下。
如何使用UserDefaults
UserDefaults 可以通过系统自带的方式调用,例如[NSUserDefaults standardUserDefaults]
来获取一个UserDefaults的实例,并通过方法来存取数据,比如:setObject:forKey:
、objectForKey:
等方法。
但是使用系统自带的方式,代码量较大,使用起来较为繁琐,因此我们可以封装一层UserDefaults,让使用更加方便,这就是UserDefaults的封装器使用。
如何封装UserDefaults
UserDefaults的封装器使用要点如下:
- 使用单例模式
- 对外提供方法,存取数据
- 对数据类型进行判断,防止存储类型错误
- 可以添加多个UserDefaults实例,以便在不同场景下使用
下面的代码演示了如何封装UserDefaults:
@interface UserDefaults : NSObject
+ (instancetype)sharedInstance;
- (void)setObject:(id)object forKey:(NSString *)key;
- (id)objectForKey:(NSString *)key;
@end
@implementation UserDefaults
+ (instancetype)sharedInstance {
static UserDefaults *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[UserDefaults alloc] init];
});
return instance;
}
- (void)setObject:(id)object forKey:(NSString *)key {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if ([object isKindOfClass:[NSString class]]) {
[userDefaults setObject:object forKey:key];
} else if ([object isKindOfClass:[NSNumber class]]) {
[userDefaults setObject:object forKey:key];
} else if ([object isKindOfClass:[NSData class]]) {
[userDefaults setObject:object forKey:key];
} else if ([object isKindOfClass:[NSArray class]]) {
[userDefaults setObject:object forKey:key];
} else if ([object isKindOfClass:[NSDictionary class]]) {
[userDefaults setObject:object forKey:key];
}
}
- (id)objectForKey:(NSString *)key {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
return [userDefaults objectForKey:key];
}
@end
这里我们通过使用单例模式,来保证只存在一个UserDefaults实例。使用两个对外提供的方法 setObject:forKey:
和 objectForKey:
来存储和获取数据。在这里进行了类型判断,防止了存储类型错误。
如何使用UserDefaults的封装器
在使用的时候,我们只需要在需要使用的头文件中引入UserDefaults.h
,然后通过如下方式使用:
[[UserDefaults sharedInstance] setObject:@"value" forKey:@"key"];
NSString *value = (NSString *)[[UserDefaults sharedInstance] objectForKey:@"key"];
UserDefaults的封装器使用示例
示例1:将NSString类型存储到UserDefaults中
[[UserDefaults sharedInstance] setObject:@"hello world" forKey:@"greeting"];
NSString *greeting = (NSString *)[[UserDefaults sharedInstance] objectForKey:@"greeting"];
NSLog(@"greeting: %@", greeting);
示例2:将NSArray类型存储到UserDefaults中
NSArray *fruits = @[@"apple", @"banana", @"orange"];
[[UserDefaults sharedInstance] setObject:fruits forKey:@"fruits"];
NSMutableArray *outputFruits = (NSMutableArray *)[[UserDefaults sharedInstance] objectForKey:@"fruits"];
NSLog(@"fruits: %@", outputFruits);
上面的示例中,我们使用setObject:forKey:
方法,分别将NSString和NSArray类型存储到了UserDefaults中。然后使用objectForKey:
方法,从UserDefaults中读取数据,并输出到控制台上。
总结
UserDefaults 是 iOS 中一种轻量级的数据持久化技术,适合存储一些简单的数据。而UserDefaults的封装器使用,可以让我们在使用上更加方便,简化代码逻辑,提高代码可读性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS数据持久化UserDefaults封装器使用详解 - Python技术站