当前位置: 首页 > 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 类 &…...

我不是在用 AI 助手,我在把自己的能力沉淀成组织资产坟

1. 什么是 Apache SeaTunnel&#xff1f; Apache SeaTunnel 是一个非常易于使用、高性能、支持实时流式和离线批处理的海量数据集成平台。它的目标是解决常见的数据集成问题&#xff0c;如数据源多样性、同步场景复杂性以及资源消耗高的问题。 核心特性 丰富的数据源支持&#…...

AI 工程化实战:从零手搓代码,这一次彻底搞懂MCP!嗜

简介 langchain中提供的chain链组件&#xff0c;能够帮助我门快速的实现各个组件的流水线式的调用&#xff0c;和模型的问答 Chain链的组成 根据查阅的资料&#xff0c;langchain的chain链结构如下&#xff1a; $$Input \rightarrow Prompt \rightarrow Model \rightarrow Outp…...

别再怕训练ReID了!用PyTorch把DeepSORT特征提取当成分类任务来训(Market-1501数据集实战)

用PyTorch简化DeepSORT特征提取训练&#xff1a;Market-1501实战指南 第一次接触DeepSORT时&#xff0c;我被那些复杂的特征提取网络训练流程吓到了——直到我发现了一个惊人的事实&#xff1a;ReID训练本质上就是一个标准的图像分类任务。本文将带你用最熟悉的PyTorch分类训练…...

LFM2.5-1.2B-Thinking-GGUF在QT桌面应用开发中的集成案例

LFM2.5-1.2B-Thinking-GGUF在QT桌面应用开发中的集成案例 1. 引言&#xff1a;当桌面应用遇上本地AI 最近在开发一个跨平台的桌面应用时&#xff0c;遇到了一个有趣的需求&#xff1a;用户希望在不联网的情况下&#xff0c;也能使用智能对话和文本处理功能。这让我开始思考如…...

从离线微调到在线热更:构建可审计、可回滚、可灰度的模型生命周期闭环(金融级SLA保障方案)

第一章&#xff1a;大模型工程化中的模型热更新机制 2026奇点智能技术大会(https://ml-summit.org) 模型热更新是支撑大模型服务持续可用与敏捷演进的核心能力&#xff0c;它允许在不中断推理请求的前提下动态加载新版本权重、替换推理图结构或切换Tokenizer配置。该机制显著降…...

告别重建烦恼:手把手教你用ikd-tree在ROS中实现动态点云地图实时更新

告别重建烦恼&#xff1a;手把手教你用ikd-tree在ROS中实现动态点云地图实时更新 在机器人SLAM和感知系统中&#xff0c;处理动态点云数据一直是个棘手的问题。想象一下&#xff0c;你的机器人在仓库中导航&#xff0c;突然有人推着货架从它面前经过——传统的静态KD-Tree会因为…...

别光看exp!深入理解pwn1_sctf_2016中C++字符串替换引发的栈溢出

从C字符串替换到栈溢出&#xff1a;pwn1_sctf_2016漏洞的深层解析 当我们在CTF比赛中遇到一个看似简单的栈溢出题目时&#xff0c;往往会习惯性地寻找明显的缓冲区溢出点。但pwn1_sctf_2016这道题却巧妙地利用了C字符串处理的特性&#xff0c;将简单的"I"替换为"…...

Qwen3.5-9B-AWQ-4bit效果惊艳分享:手写体混合印刷体截图的高准度识别

Qwen3.5-9B-AWQ-4bit效果惊艳分享&#xff1a;手写体混合印刷体截图的高准度识别 1. 模型能力概述 Qwen3.5-9B-AWQ-4bit是一款支持图像理解的多模态模型&#xff0c;能够结合上传图片与文字提示词&#xff0c;输出中文分析结果。这个模型特别擅长处理图片主体识别、场景描述、…...

3步解决华硕笔记本性能管理难题:G-Helper硬件控制全解析

3步解决华硕笔记本性能管理难题&#xff1a;G-Helper硬件控制全解析 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...

3分钟快速上手:ESM蛋白质语言模型完全指南

3分钟快速上手&#xff1a;ESM蛋白质语言模型完全指南 【免费下载链接】esm Evolutionary Scale Modeling (esm): Pretrained language models for proteins 项目地址: https://gitcode.com/gh_mirrors/esm/esm ESM&#xff08;Evolutionary Scale Modeling&#xff09;…...