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日

相关文章

  • 易语言对数据库操作之“取字段尺寸”命令用法

    易语言对数据库操作之“取字段尺寸”命令用法详解 什么是数据库字段尺寸? 在数据库中,每个字段都有其数据类型和长度,长度也叫做尺寸。尺寸是指该字段能够存储的最大字节数或者字符个数,通常以字节或字符数表示。在对数据库进行操作时,我们有时需要获取某个字段的尺寸,以便进行一些相关的操作,比如保证输入数据不超过字段长度限制。 易语言中的“取字段尺寸”命令 在易语言中,…

    other 2023年6月25日
    00
  • Golang打包配置文件的实现示例

    下面是关于“Golang打包配置文件的实现示例”的完整攻略。 1. 简介 在Golang项目中,我们经常需要使用配置文件来配置我们的应用程序。但是,如果有很多配置文件,传递文件可能会变得很困难。因此,我们可以把配置文件打包成一个二进制文件,以便它们可以在应用程序启动时一起加载。在这篇攻略中,我们将详细讲解如何在Golang中实现打包配置文件。 2. 基本思路…

    other 2023年6月25日
    00
  • intellijidea2018激活

    以下是关于“IntelliJ IDEA 2018激活”的完整攻略,包括基本概念、步骤和两个示例。 基本概念 IntelliJ IDEA是一款由JetBrains开发的Java集成开发环境(IDE),它提供了丰富的功能和工具,帮助开发人员更高地开发Java应用程序。IntelliJ IDEA 2018是IntelliJ IDEA的一个版本,它在2018年发布。…

    other 2023年5月7日
    00
  • Android自定义WheelView地区选择三级联动

    一、背景介绍 在开发Android应用时,通过使用WheelView控件,我们可以实现像省市区选择器、时间选择器等功能。本文着重介绍如何使用自定义的WheelView控件实现地区选择三级联动的功能。 二、自定义WheelView控件 为了实现三级联动的地区选择功能,我们需要先自定义一个可以支持多级数据的控件。这里我们借鉴开源控件library中的WheelV…

    other 2023年6月25日
    00
  • macossierra10.12.6安装u盘制作

    以下是详细讲解“macOS Sierra 10.12.6安装U盘制作的完整攻略”,过程中至少包含两条示例说明的标准Markdown格式文本: macOS Sierra 10.12.6安装U盘制作的完整攻略 在安装macOS Sierra 10.12.6操作系统时,可以使用U盘进行安装。本文将介绍如何制作macOS Sierra 10.12.6安装U盘,包括使…

    other 2023年5月10日
    00
  • 浅谈订单重构之 MySQL 分库分表实战篇

    浅谈订单重构之 MySQL 分库分表实战篇 本文将详细讲解如何进行订单重构,使用MySQL的分库分表技术来提高系统的性能和扩展性。以下是实现这一过程的完整攻略: 1. 数据库设计 首先,根据业务需求和数据量预估,设计合适的数据库架构。可以采用垂直分库和水平分表的方式来进行订单数据的分片存储。 2. 数据迁移 将现有的订单数据迁移到分库分表的结构中。可以使用数…

    other 2023年10月18日
    00
  • 百度帐号忘记密码怎么申诉找回?

    百度帐号忘记密码怎么申诉找回? 如果我们忘记了百度账户(Baidu ID)的密码,我们可以通过一系列的“申诉找回”流程来重置密码。下面是完整的操作步骤: 1. 进入百度帐号密码找回页面 我们可以在浏览器中访问 https://passport.baidu.com/v2/?login 页面,点击密码找回链接,然后选择找回密码方式为“密保问题”。 2. 输入帐号…

    other 2023年6月27日
    00
  • 关于java:hashmap允许重复吗?

    在Java中,HashMap是一种常用的数据结构,用于存储键值对。在使用HashMap时,可能会遇到键重复的情况,那么HashMap允许重复吗?本文将详细解HashMap是否允许重复,以及如何处理重复键的情况。 HashMap是否允许重复 在HashMap中,键是唯一的,但是值可以重复。也是说,HashMap不允许重复的键,但是允许重复的值。如果向HashM…

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