当前位置: 首页 > news >正文

NSUserDefaults

目录

  • 1. 简介
  • 2. 基本使用
    • 2.1 步骤
    • 2.2 对应接口
    • 2.2 示例代码
  • 3. 常用接口及属性
    • 3.1 存储
    • 3.2 获取
  • 4. 注意点
    • 4.1 NSUserDefaults 存储的对象全是不可变的
    • 4.2 将自定义类型数据读写 NSUserDefaults
    • 4.3 非即时写入
  • 5.参考链接

1. 简介

NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提

可以保存的数据结构。在NSUserDefaults中,可以保存的数据结构有:

  • NSString 字符串
  • NSNumber 数字
  • NSArray 数组
  • NSDictionary 字典
  • NSDate 日期
  • NSData 二进制数据
  • 如果需要保存自定义对象,则需要将对象归档为NSData,再进行保存。详情见section 4.2

2. 基本使用

2.1 步骤

  1. 获取NSUserDefaults实例
  2. 获取数据/删除数据/存储数据
  3. 通知写入

2.2 对应接口

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; //获取NSUserDefaults实例。
[defaults setObject:object forKey:key];   //存储数据。
id object = [defaults objectForKey:key];  //获取数据。用key获取保存的对象,返回值为id类型,所以可以接任何指针
[defaults removeObjectForKey:key];   //删除数据。使用key删除保存的值NSString *appdomainStr = [[NSBundle mainBundle] bundleIdentifier];
[defaults removePersistentDomainForName:appdomainStr];  //一次性删除全部存储[defaults synchronize];  //通知立刻写入。保存完数据后,如果马上抛出异常,可能会丢失数据,所以建议保存完后,调用synchronize方法,通知马上写入

2.2 示例代码

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"Wally" forKey:@"NAME"];
[defaults setObject:number forKey:@"NUMBER"];
id name = [defaults objectForKey:@"NAME"];
id num = [defaults objectForKey:@"NUMBER"];
[defaults removeObjectForKey:@"ARRAY"];
[defaults synchronize];

3. 常用接口及属性

NSUserDefaults可以存储上面说到的6种类型,苹果爸爸还给我们提供了直接转换出对应类型的方法,避免每次都写强转代码。

3.1 存储

//存储Int值
[defaults setInteger:123 forKey:@"INT"];//存储布尔值
[defaults setBool:YES forKey:@"BOOL"];//存储浮点型
[defaults setFloat:3.14 forKey:@"FLOAT"];//存储数组
NSArray* arr = [NSArray arrayWithObjects:@"Wally", @"Barry", @"Rose", nil];
[defaults setObject:arr forKey:@"ARRAY"];

3.2 获取

//获取Int值
[defaults integerForKey:@"INT"];//获取BOOL布尔值
[defaults boolForKey:@"BOOL"];//获取浮点值
[defaults floatForKey:@"FLOAT"];//获取数组
[defaults objectForKey:@"ARRAY"];

4. 注意点

4.1 NSUserDefaults 存储的对象全是不可变的

NSUserDefaults 存储的对象全是不可变的(这一点非常关键,弄错的话程序会出bug

NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"123",@"234", nil];
NSArray * array = [NSArray arrayWithArray:mutableArray];
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:array forKey:@"记住存放的一定是不可变的"];

4.2 将自定义类型数据读写 NSUserDefaults

使用NSKeyedArchiver 对数据进行归档 反归档(iOS的归档,应该就类似于数据的序列化和反序列化机制)

  1. 定义一个遵守NSCoding协议的类
  2. 复写NSCoding协议中的initWithCoder方法和encodeWithCoder方法,initWithCoder方法是为了解档,用数据恢复对象,encodeWithCoder方法是为了将对象归档
  3. 归档(序列化):使用NSKeyedUnarchiver,调用archivedDataWithRootObject方法,归档对象,即将自定义类型对象转换成NSDate类型
  4. 解档(反序列化):使用NSKeyedUnarchiver,调用unarchiveObjectWithData方法,解档对象,即将data类型转换对象成自定义类型

写入数据

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];    //归档
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:data forKey:@"oneStudent"];
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

读取数据

// 读取data数据
NSData *data = [user objectForKey:@"oneStudent"];// 将data类型转换成student类型
Student *student = [NSKeyedUnarchiver unarchiveObjectWithData:data];    //解档

4.3 非即时写入

UserDefaults是根据时间戳定时的把缓存中的数据写入本地磁盘,而非即时写入。为了防止数据丢失,我们在对重要的数据保存时使用synchornize方法强制写入。但是也要注意,不用频繁的使用synchornize,这样毕竟影响性能和效率,

5.参考链接

iOS NSUserDefaults使用
https://www.jianshu.com/p/569be39260f2

相关文章:

NSUserDefaults

目录 1. 简介2. 基本使用2.1 步骤2.2 对应接口2.2 示例代码 3. 常用接口及属性3.1 存储3.2 获取 4. 注意点4.1 NSUserDefaults 存储的对象全是不可变的4.2 将自定义类型数据读写 NSUserDefaults4.3 非即时写入 5.参考链接 1. 简介 NSUserDefaults是一个单例,在整个程…...

Windows下通过cwRsync备份到服务器服务器之间使用rsync备份传输

Windows下通过cwRsync备份到服务器&服务器之间使用rsync备份传输 Linux服务器配置Rsync服务端1、安装Rsync2、配置rsyncd.conf3、创建目录、密码文件并修改权限4、启动rsync服务 Windows配置cwRsync客户端1、下载并解压cwRsync客户端2、打开cmd,执行同步命令 Wi…...

IS420UCSBH4A 用于高速应用中的Mark VIe系列

控制器IS420UCSBH4A由通用电气公司设计,用于高速应用中的Mark VIe系列,采用1066 MHz EP80579英特尔处理器。该控制器可与Mark VIe系列一起用于EX2100e和LS2100e应用。 IS420UCSBH4A技术规格 系列马克维处理机类型1066兆赫EP80579英特尔型号IS420UCSBH4A…...

将JSON写入文件

首先需要引入fastjson的依赖文件&#xff0c;以下是maven的依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version></dependency> 然后是将json字符串写到…...

effective c++ 35 考虑virtual函数以外的其他选择

effective c 35 考虑virtual函数以外的其他选择 在本节中&#xff0c;作者给出了一些可以替代调用virtual函数的方法。下面就一一进行介绍。 分析 1.考虑NVI的实现方式(模板方法设计模式) 父类和子类都调用healthValue同一接口&#xff0c;但是返回值不同。这是一种public非…...

Akura Medica:新型静脉血栓切除系统,完成首次人体试验

Akura Medical公司宣布&#xff0c;其机械血栓切除平台在人体首次使用成功&#xff0c;这是一项具有突破性的技术&#xff0c;可以有效地治疗肺栓塞、深静脉血栓等血栓栓塞疾病。该平台使用了一种与众不同的方法&#xff0c;可以高效地清除血管内的血栓&#xff0c;同时保护血管…...

大型央企集团财务经营分析框架系列(三)

01集团经营管理分析的切入点 集团经营管理分析的切入点往往是从财务分析开始。 往往在一家企业里面&#xff0c;财务方面的信息化建设是要早于其它方面的信息化建设的&#xff0c;业务标准化程度比较高&#xff0c;数据标准化程度也比较高&#xff0c;分析框架也相对成熟。 …...

C++并发编程:std::future、std::async、std::packaged_task与std::promise的深度探索

C并发编程&#xff1a;std::future、std::async、std::packaged_task与std::promise的深度探索 一、引言 (Introduction)1.1 并发编程的概念 (Concept of Concurrent Programming)1.2 C并发编程的重要性 (Importance of Concurrent Programming in C)1.3 关于std::future、std:…...

测牛学堂:2023软件测试学习教程之sql的单表查询排序和模糊查询

单表查询的排序 关键字&#xff1a;order by 排序的类型&#xff0c;升序字段&#xff1a;ASC &#xff0c;省略的话默认就是升序。 降序的字段&#xff1a;DESC 语法&#xff1a; order by 字段名 ASC| DESC返回的表则会按照给定的字段排序 例子&#xff1a;查询学生的考试成…...

CSS第一天总结

css第一天总结 css简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表。 CSS 是也是一种标记语言 CSS 主要用于设置 HTML 页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff09;、图片的外形&#xff08;宽高、…...

js中各种console使用方法大全

console 1.console.log() &#xff08;1&#xff09;用于标准输出流的输出&#xff0c;也就是在控制台中显示一行信息。 &#xff08;2&#xff09;当传递多个参数时&#xff0c;控制台输出时将以空格分隔这些参数。 &#xff08;3&#xff09;也可以用占位符来定义输出的格…...

江西棒球未来发展规划·棒球1号位

关于江西棒球未来发展规划: 一、总体思路 江西棒球运动要立足当前,着眼长远,切实增强鼓励支持体育运动的社会氛围,弘扬体育精神,深化体育改革,加强体育基层建设,努力建设中国棒球之乡。把打造品牌赛事和培养明星运动员作为两手抓的发展方向,不断增强江西棒球运动的整体实力和…...

【笔记】做二休五

在记录去超市购物&#xff0c;菜场买菜&#xff0c;社区团购的花费时&#xff0c;将每个物品的价格记录下来。 大家应该善加利用自己所拥有的事物&#xff0c;若勉强想要利用自己没有的&#xff0c;只会让自己痛苦。 打扫&洗衣服 小苏打是可用于家庭清洁的万能清洁剂&…...

Qt6之字符串类内存分配新变化——16的次方增加

qt提供了比标准c string更强大&#xff0c;更丰富&#xff0c;更实用的字符串类QString&#xff0c;它的主要功能22个已经在之前逐一分析过&#xff0c;感兴趣的可前往以下链接查看&#xff0c;本文主要重点分析下qt在字符串类上面做的优化&#xff0c;主要是两个方面&#xff…...

C++ 名称空间

一、名称空间 1.1、引入名称空间的背景 在C中的名称可以是变量&#xff0c;函数&#xff0c;类以及类的成员。随着项目的增大&#xff0c;名称相互冲突的可能性也在增大。使用多个厂商的类库时&#xff0c;可能导致名称冲突。例如&#xff0c;两个库都定义了名为List&#xff…...

作为一名普通的java程序员,我想和大家分享一下4年来的工作内容

一直有小伙伴想了解更多关于我的工作内容&#xff0c;所以今天我来分享一下我作为一名普通java程序员&#xff0c;4年来工作内容发生了哪些变化&#xff0c;以及我有什么感悟。 我是16届毕业生&#xff0c;我的第一份工作是做外包&#xff0c;第一年的时间里测试偏多&#xff…...

CyberLink的专业视频编辑软件ActionDirector Ultra 3.0版本在win10系统的下载与安装配置教程

目录 前言一、ActionDirector Ultra安装二、使用配置总结 前言 ActionDirector Ultra是CyberLink公司开发的专业视频编辑软件&#xff0c;旨在帮助用户创作高质量的运动和冒险视频。该工具提供了一些先进的特效和编辑工具&#xff0c;让用户能够轻松地剪辑、修剪、调整颜色和添…...

在外远程访问公司局域网用友畅捷通T财务软件 - 远程办公

文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求&#xff1b;全面支持企业对远程仓库、异地办事处的管理需求&#xff1b;全面满足企业财务业务一体化管理需求。企业一般将其…...

VariantAutoencoder(VAE)中使用生成好的模型进行声音生成

文章目录 概述一、soundgenerator.py文件soundgenerator.py实现代码一、convert_spectrogram_to_audio方法librosa.db_to_amplitudelibrosa.istft generate方法 二、generate.py文件实现代码load_fsdd函数说明select_spectrogram函数说明save_signals函数说明main函数说明 三、…...

C++数据封装以及定义结构的详细讲解鸭~

名字&#xff1a;阿玥的小东东 博客主页&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 定义结构 访问结构成员 结构作为函数参数 指向结构的指针 typedef 关键字 C 数据封装 数据封装的实例 设计策略 C 类 &…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...