iOS数据持久化UserDefaults封装器使用详解

yizhihongxing

iOS数据持久化UserDefaults封装器使用详解

什么是UserDefaults

UserDefaults 是 iOS 中一种轻量级的数据持久化技术,允许我们在应用程序结束后仍然可以保存一些数据,并在下次应用启动时恢复这些数据。

UserDefaults 使用键值对的方式来存储数据。其本质上是一个plist文件,保存在沙盒中的Library/Preferences目录下。

如何使用UserDefaults

UserDefaults 可以通过系统自带的方式调用,例如[NSUserDefaults standardUserDefaults]来获取一个UserDefaults的实例,并通过方法来存取数据,比如:setObject:forKey:objectForKey:等方法。

但是使用系统自带的方式,代码量较大,使用起来较为繁琐,因此我们可以封装一层UserDefaults,让使用更加方便,这就是UserDefaults的封装器使用。

如何封装UserDefaults

UserDefaults的封装器使用要点如下:

  1. 使用单例模式
  2. 对外提供方法,存取数据
  3. 对数据类型进行判断,防止存储类型错误
  4. 可以添加多个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技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • rust解决嵌套——Option类型的map和and_then方法的使用

    Rust解决嵌套——Option类型的map和and_then方法的使用攻略 在Rust中,Option类型是一种用于处理可能为空的值的枚举类型。当我们需要对Option类型进行操作时,可以使用map和and_then方法来处理嵌套的Option值。本攻略将详细介绍这两个方法的使用。 1. map方法 map方法用于对Option类型的值进行转换操作。它接受…

    other 2023年7月28日
    00
  • Win11系统exe文件打不开怎么办?Win11系统打开exe文件的方法

    以下是详细讲解Win11系统exe文件打不开的解决方法: 问题描述 在Win11系统中,有时安装后的exe文件可能会无法打开,出现提示“此应用不能在你的PC上运行,请检查与PC对应的信息”。这可能会导致你无法正常使用某些软件或应用程序。 解决方法 检查文件是否安全 首先,我们需要确保下载的exe文件是安全的。可以使用杀毒软件对该文件进行扫描,确保它没有病毒或…

    other 2023年6月25日
    00
  • teamfoundationserver基本功能

    Team Foundation Server基本功能 Team Foundation Server(TFS)是一种用于软件开发和应用生命周期管理的全面解决方案。它提供了一组关键功能,包括版本控制、质量管理、项目和团队协作、构建和部署自动化等等。在本文中,我们将着重介绍TFS的基本功能。 版本控制 TFS提供了一种有效的版本控制系统,可帮助软件团队协同开发。团…

    其他 2023年3月29日
    00
  • 部分网页打不开的原因分析以及解决方法

    部分网页打不开的原因分析以及解决方法 原因分析 网络问题 网络问题是导致部分网页无法打开的最常见原因。网络问题可能包括: DNS解析问题:DNS解析无法完成或出错会导致网页无法正常加载。 域名或IP地址错误:输入错误的域名或IP地址会导致网页无法访问。 网络连接问题:如果网络连接不稳定或连接失败,网页也会无法加载。 浏览器问题 浏览器问题也是可能导致部分网页…

    other 2023年6月27日
    00
  • windowsserver2008r2服务器系统安装及配置全过程图文…

    Windowsserver2008r2服务器系统安装及配置全过程图文教程 一、安装Windows Server 2008 R2操作系统 1. 准备工作: 下载相应的Windows Server 2008 R2系统镜像文件,并制作启动盘。 准备一台符合安装要求的计算机,确保计算机启动时读取安装盘。 2. 进入系统安装界面: 将Windows Server 20…

    其他 2023年3月28日
    00
  • Easyui在treegrid添加控件的实现方法

    下面是关于EasyUI在treegrid添加控件的实现方法的详细攻略: 1. 引入EasyUI相关文件 在网页中引入EasyUI相关文件,包括jQuery、EasyUI CSS和EasyUI JS。 <!–引入jQuery文件–> <script type="text/javascript" src="jq…

    other 2023年6月26日
    00
  • Java环境变量配置教程

    下面是“Java环境变量配置教程”的完整攻略: Java环境变量配置教程 Java是一种跨平台语言,因此在安装Java开发环境时需要配置环境变量。这样可以在命令行或终端中直接运行Java程序,提高程序员的工作效率。下面是Java环境变量配置的详细步骤。 第一步:下载并安装Java 首先需要从官网(https://www.java.com/)下载安装Java运…

    other 2023年6月27日
    00
  • Spring中Bean初始化和销毁的方式总结

    Spring中Bean初始化和销毁的方式总结 在Spring中,可以通过多种方式来控制Bean的初始化和销毁,这些方式包括: 1. 在XML配置文件中配置init-method和destroy-method 在XML文件中,我们可以使用init-method和destroy-method属性来指定Bean的初始化和销毁方法,如下所示: <bean id…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部