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

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日

相关文章

  • golang学习笔记struct-继承

    Golang学习笔记:struct-继承 在Golang中,可以使用struct来定义自定义类型。struct可以包含字段和方法,可以用于面向对象编程。本攻略介如何在G中使用struct实现继承,包括嵌入式结构体和匿名字段。以下是Golang学习笔记struct-的完整攻略: 1. 嵌入式结构体 嵌入式结构体是指在一个结构体中嵌入另一个结构体。嵌入式结构可以…

    other 2023年5月8日
    00
  • iOS14开发者预览版Beta 2值得升级吗 iPadOS14开发者预览Beta2更新内容大全

    iOS 14开发者预览版Beta 2值得升级吗 iOS 14开发者预览版Beta 2是苹果公司发布的iOS 14操作系统的第二个测试版本。在决定是否升级之前,我们需要考虑以下几个因素: 1. 新功能和改进 iOS 14开发者预览版Beta 2带来了一系列新功能和改进,这些功能可能会对你的iPad体验产生积极影响。以下是一些值得注意的更新内容: 小组件(Wid…

    other 2023年7月27日
    00
  • 服务器技术全面解析

    服务器技术全面解析 前言 服务器技术是一项广泛的技术领域,涉及到多种方面的知识。了解服务器技术对于每一个Web开发者都是必要的,因为它是支撑所有网站、应用程序和Web服务的基石。在这篇文章中,我们将对服务器技术进行全面的解析。我们将从什么是服务器开始,逐步介绍服务器的相关知识,并且提供两个示例来说明服务器的运作方式。 什么是服务器? 服务器是指一台专门用于提…

    other 2023年6月26日
    00
  • pycharm打开命令行或Terminal的方法

    打开命令行或Terminal通常是程序员日常开发中必须要掌握的技能之一,下面我将介绍如何在PyCharm中打开命令行或Terminal。 PyCharm打开命令行 打开PyCharm,选择需要运行Python文件的项目。 在PyCharm窗口的底部工具栏中找到“Terminal”按钮,点击它。 会弹出一个命令行窗口,此时可以在其中输入需要执行的命令。 示例:…

    other 2023年6月26日
    00
  • 浅谈JQuery+ajax+jsonp 跨域访问

    下面是关于“浅谈JQuery+ajax+jsonp跨域访问”的完整攻略: 什么是跨域访问? 跨域访问指的是在一个域名下的文档或脚本向另一个域名下的文档或脚本发起请求的行为。 同源策略 为了保证 Web 应用的安全性,浏览器为 JavaScript 引入了同源策略(Same Origin Policy)。即只有相同协议、域名和端口才能进行通信。这种策略可以避免…

    other 2023年6月27日
    00
  • eml文件怎么打开

    当我们在电子邮件中收到了.eml格式的邮件附件时,需要打开查看邮件的内容。下面是打开.eml文件的详细步骤: 步骤1:下载.eml文件 首先,你需要将.eml文件保存到你的电脑上。这可以通过直接双击邮件附件或在邮件正文中选择下载附件实现。如果你使用的是Web邮箱,可能需要先把.eml文件另存为。 步骤2:使用邮件客户端打开.eml文件 有很多邮件客户端可以打…

    其他 2023年4月16日
    00
  • MacOS系统下Unity启动黑屏的解决方法

    MacOS系统下Unity启动黑屏的解决方法攻略 如果你在MacOS系统下安装了Unity,启动时出现了黑屏,可能会让你十分困扰。本文将为你提供解决办法,帮助你顺利启动Unity。 前置条件 MacOS系统环境 安装了Unity软件 解决方法 1. 更改显卡驱动设置 打开MacOS的系统设置。 进入显示器设置。 在左侧选择“显示器”选项卡。 勾选“低分辨率”…

    other 2023年6月27日
    00
  • NS2仿真:使用NS仿真软件模拟简单网络模型

    NS2仿真:使用NS仿真软件模拟简单网络模型 NS2是一个用于网络仿真的自由软件,基于C++编写。它主要运行在Linux和Unix系统上,可以实现对TCP/IP网络协议的仿真,以便研究和理解现有网络协议的性能和验证新协议的正确性。 在此篇文章中,我们将简单介绍如何使用NS2仿真软件模拟一个简单的网络模型。 配置环境 首先,我们需要在一台Linux或Unix系…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部