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日

相关文章

  • python 中的 super详解

    Python 中的 super 详解 Python 的 super 函数是一种很特殊和重要的方法,它允许派生类调用父类的方法、属性等,本文将详细讲解 super 函数的用法及其机制。 什么是 super 函数 super 函数是 Python 中的一个内置函数,它常用于在派生类中调用其基类的方法或属性。通过 super 函数,我们可以更加方便地实现派生类与基…

    other 2023年6月27日
    00
  • JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)

    下面我将详细讲解JavaScript继承的基础知识,包括原型链继承、借用构造函数继承、混合模式继承、原型式继承、寄生式继承和寄生组合式继承。 原型链继承 JavaScript使用原型链的方式实现继承,通过将一个对象的原型指向另一个对象来实现继承。 示例代码如下: // 创建一个父对象,包含属性和方法 var parent = { name: ‘Bob’, a…

    other 2023年6月26日
    00
  • C++实现LeetCode(206.倒置链表)

    首先,LeetCode的题目206是一个非常经典的链表反转问题。可以使用迭代和递归两种方式来实现。 1. 题目描述 反转一个单链表。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 示例 2: 输入: NULL 输出: NULL 2. 迭代…

    other 2023年6月27日
    00
  • 一文搞懂java中类及static关键字执行顺序

    以下是详细的攻略: 一文搞懂Java中类及static关键字执行顺序 在Java中,类及static关键字的执行顺序是非常重要的问题。本文将为大家详细介绍Java中类及static关键字的执行顺序,以及一些实际的示例分析。 类的执行顺序 在Java中,类的执行顺序如下: 加载父类 加载子类 执行父类的static代码块(不会执行构造方法) 执行子类的stat…

    other 2023年6月20日
    00
  • GHOST参数、命令操作指南

    GHOST参数详解 在命令行中调用 Ghost 时,可以使用以下参数对 Ghost 进行配置和优化: –no-prompt : 表示在运行时不显示提示信息 –development : 将 Ghost 配置为开发环境 –production : 将 Ghost 配置为生产环境 –db sqlite3 : 使用 SQLite3 作为数据库 –db m…

    other 2023年6月26日
    00
  • linux生成(加载)动态库静态库和加载示例方法

    生成动态库和静态库的过程可以分为三个步骤:编写源代码、编译生成目标文件、生成动态库或静态库。 编写源代码 首先,我们要编写需要打包成库的源代码。这里,我们假设我们已经编写好了一个简单的C语言用例,其中包含一个函数: /* test.c */ #include <stdio.h> int test_func(int a, int b) { prin…

    other 2023年6月25日
    00
  • ntp时间同步服务器的搭建

    NTP时间同步服务器的搭建 NTP(Network Time Protocol)是一种用于同步计算机时钟的协议。在网络中,计算机的时钟可能会因为各种原因现偏差,使用NTP可以将计算机的钟同步到网络时间服务器上,保证计算机的时钟准确无误。本攻略将介绍如何搭建一个NTP时间同服务器。 步骤1:安装NTP 在Ubuntu系统中,可以使用以下命令安装NTP服务: s…

    other 2023年5月7日
    00
  • Kubernetes集群环境初始化

    Kubernetes集群环境初始化攻略 1. 搭建虚拟机环境 使用 VirtualBox 或 VMware Workstation 搭建虚拟机环境,安装操作系统(建议使用 Ubuntu 18.04 LTS Server),配置网络等基本设置。 2. 安装 Docker 首先,更新apt包列表: sudo apt-get update 接着,安装必要的依赖包:…

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