NSUserDefaults数据存储总结

2024-01-31 10:48

本文主要是介绍NSUserDefaults数据存储总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NSUserDefaults用法详解

1.NSUserDefaults是一个单例类,可以用于数据的永久保存, 一般用于保存应用程序设置以及用户数据等轻量级数据, 而且简单实用。

2.NSUserDefaults系统在整个app生命周期中都是可用的, 也就是说,无论用户关闭程序还是关机,在用户再次打开程序或开机后这些数据仍然存在。

3.NSUserDefaults是单例,同时也是线程安全的

4.NSUserDefaults存储的对象全是不可变的:NSDictionary, NSArray, NSString, NSNumber, NSDate, NSData. 
这一点非常关键,存储对象不对的话会导致程序崩溃.

5.存入数据时, 不会立即同步到内存中, 但可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步。 
[[NSUserDefaults standardUserDefaults]synchronize]

6.NSUserDefaults数据存储其实是保存于一个plist文件中。这个文件的位置为:  
Library/Application Support/iPhone Simulator/X.X/Applications/一串id/Library/Prefereces

7.通过removeObjectForKey:方法可以进行数据的移除.

NSUserDefaults 存储自定义对象

若需要将自定义对象通过NSUserDefaults存储时, 不可以直接存储, 也不可以将自定义对象放入字典或者数组中在添加. 但可以通过将自定义对象转化为 NSData 类型, 再进行存储.

1.将自定义类型转换为NSData类型

自定义类型对象要归档就需要遵守< NSCodeing > 协议, 然后在 .m中实现恩codeWithcode: 和initWithCoder: 两个方法.

自定义类代码:

#import <Foundation/Foundation.h>@interface Person : NSObject <NSCoding>
@property (nonatomic, copy)NSString *name;
@property (nonatomic, assign)NSInteger age;
@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
#import "Person.h"@implementation Person-(void)encodeWithCoder:(NSCoder *)aCoder
{[aCoder encodeObject:self.name forKey:@"name"];[aCoder encodeObject:@(self.age) forKey:@"age"];
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{self = [super init];if (self) {self.name = [aDecoder decodeObjectForKey:@"name"];self.age = [[aDecoder decodeObjectForKey:@"age"] integerValue];}return self;
}
@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

2.将 NSData存入 NSUserDefaults中

    //自定义类型Person *per = [[Person alloc]init];per.name = @"zhangsan";per.age = 42;//转化为 dataNSData *data = [NSKeyedArchiver archivedDataWithRootObject:per];//存入[[NSUserDefaults standardUserDefaults]setObject:@{@"zhangsan":data} forKey:@"person"];[[NSUserDefaults standardUserDefaults]synchronize];//取出打印Person *a = [NSKeyedUnarchiver unarchiveObjectWithData:[[[NSUserDefaults standardUserDefaults] objectForKey:@"person"] valueForKey:@"zhangsan"]];NSLog(@"%@,%ld",a.name,a.age);

这篇关于NSUserDefaults数据存储总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663512

相关文章

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres