iOS归档

iOS归档与解归档,持久化存储 iOS归档与解归档,持久化存储,文件读写, 立即下载

“归档”是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程。

只要在类中实现的每个属性都是标量(如int或flloat)或都是符合NSCoding协议的某个类的实例,就可以对你的对象进行完整归档。

      1.      NSCoding协议之编码与解码

要进行归档的对象必须符合NSCoding协议。NSCoding协议声明了两个方法,这两个方法都是必须的,分别是:方法encodeWithCoder:将对象编码到归档中;方法initWithCoder:通过对归档解码来创建一个新对象。

编码解码方法都应该指定如何归档想要保存的对象中的每个实例变量。

对于基本Objective-C类(包括NSString、NSArray、NSDictionary、NSSet、NSDate、NSNumber和NSData等)以及嵌套的对象(如包含字符串,甚至其他数组对象的数组)可以使用 encodeObject:forkey: 方法进行编码,使用initWithCoder:方法进行解码。

对于基本数据类型,可以使用如下表所示的方法进行编码解码:

 

编码方法

解码方法

encodeBool:forKey:

decodeBool:forKey:

encodeInt:forKey:

decodeInt:forKey:

encodeInt32:forKey:

decodeInt32:forKey:

encodeInt64:forKey:

decodeInt64:forKey:

encodeFloat:forKey:

decodeFloat:forKey:

encodeDouble:forKey:

decodeDouble:forKey:

 

示例代码如下:

// 编码方法
- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:objectOne forKey:@"keyOfObjectOne"];
    [coder encodeObject:objectTwo forKey:@"keyOfObjectTwo"];
    [coder encodeInt:someInt forKey:@"keySomeInt"];
    [coder encodeFloat:someFloat forKey:@"keyOfSomeFloat"];
}

// 如果超类也遵循NSCoding协议,编码方法还需要确保对超类调用encodeWithCoder:
- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:objectOne forKey:@"keyOfObjectOne"];
    [coder encodeObject:objectTwo forKey:@"keyOfObjectTwo"];
    [coder encodeInt:someInt forKey:@"keySomeInt"];
    [coder encodeFloat:someFloat forKey:@"keyOfSomeFloat"];
    [super encodeWithCoder:encoder];
}

// 解码方法
- (id)initWithCoder:(NSCoder *)coder {
    if (self = [super init]) {
		self.objectOne = [coder decodeObjectForKey:@"keyOfObjectOne"];
		self.objectTwo = [coder decodeObjectForKey:@"keyOfObjectTwo"];
		self.someInt = [coder decodeObjectForKey:@"keySomeInt"];
		self.someFloat = [coder decodeObjectForKey:@"keyOfSomeFloat"];
    }
    return self;
}

       2.      归档方式

方式一:

使用NSKeyedArchiver类的类方法archiveRootObject:toFile进行归档;

使用NSKeyedUnarchiver类的类方法unarchiveObjectWithFile:进行解归档。

方式二:

使用NSData创建自定义档案。

NSData对象可以用来保留一块内存空间以备后来存储数据,这些数据空间的典型应用是作为一些数据的临时存储空间,如随后将被写入文件,或可能用于容纳磁盘读取的文件内容。

从符合NSCoding的一个或多个对象创建归档步骤如下:

	NSString *filePath = [self dataFilePath:archiveFilePath];
    
    NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]
                                 initForWritingWithMutableData:data];
    [archiver encodeObject:myObject forKey:keyOfMyObject];
    [archiver finishEncoding];
    [data writeToFile:filePath atomically:YES];
    [archiver release];
 	[data release];

解归档的步骤如下:

	NSString *filePath = [self dataFilePath:archiveFilePath];
    
    NSMutableData *data = [[NSMutableData alloc] init]; 
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
                                     initForReadingWithData:data];
    classOfMyObject *myObject = [unarchiver decodeObjectForKey: keyOfMyObject];
    [unarchiver finishDecoding]; 
    [unarchiver release];
 	[data release];

       3.      使用归档来复制对象

归档和解归档过程中产生的是对象的新副本,因此,当需要生成一个对象(或不支持NSCopying协议的对象)的深复制时,应该记住这项技术。

例如对dataArray进行深复制:

    NSData * data;
    data = [NSKeyedArchiver archivedDataWithRootObject:dataArray];
    dataArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];

       4.      NSCopying协议

符合NSCopying对于任何数据模型对象来说都是一个非常好的主意。NSCopying有一个copyWithZone:方法,可用于复制对象。该方法的内容类似于以下内容:

- (id)copyWithZone:(NSZone *)zone {
    MyClass * copy = [[[self class] allocWithZone:zone] init];
    copy.objectOne = [self.objectOne copyWithZone:zone];
    copy.objectTwo = [self.objectTwo copyWithZone:zone];
    copy.someInt = self.someInt;
    copy.someFloat = self.someFloat;
    return copy;
}


国产数据库PolarDB-X实战:5分钟快速搭建本地开发环境(附Docker一键部署脚本) 本文提供了一份详尽的国产分布式数据库PolarDB-X本地开发环境搭建指南。通过Docker Compose一键部署脚本,开发者可在5分钟内快速启动一个功能完整的PolarDB-X实例,涵盖环境准备、脚本解析、连接验证及日常维护,极大简化了国产数据库的入门和体验流程。 阅读详情

相关推荐

CARLA 0.9.15从零开始:环境搭建与基础场景实战指南

本文是CARLA 0.9.15从零开始的完整环境搭建与基础运行教程。详细介绍了在Linux系统下配置Python环境、下载安装CARLA核心软件包、启动服务器以及运行第一个基础场景的步骤。重点演示了如何通过Python客户端脚本生成随机车流,并手动控制EGO车辆在仿真城市中行驶,为自动驾驶算法开发构建了坚实的仿真测试基础。

weixin_29053383的博客 779

iOS 一种简单的归档持久化方法

要遵循 NSCoding 协议实现 encodeWithCoder 和 initWithCoder方法。

liubo的博客 268

Plecs仿真进阶:半桥LLC谐振变换器从开环到闭环的实战解析

本文通过Plecs软件,详细解析了半桥LLC谐振变换器从开环模型搭建到闭环控制实现的完整仿真流程。文章深入探讨了谐振参数设置、关键波形解读,并重点分享了基于PI控制器的闭环调试实战经验与参数整定技巧,帮助工程师高效掌握这一高效拓扑的仿真与设计方法。

weixin_29231263的博客 281

iOS 利用运行时将对象序列化与反序列化

在iOS中想要把一些对象数据存储到本地需要那个对象实现NSCoding协议下的两个方法 -(void) encodeWithCoder:(NSCoder *)encoder; -(id) initWithCoder:(NSCoder *)decoder; 然后在这两个方法中实现对象序列化与反序列化的操作. 例如: Person类有两个属性 @property (nonatomi...

longlongValue 1753

从查表法到实时计算:SimpleFOC库中正弦函数优化的技术演进

本文深入探讨了SimpleFOC库v2.0.1版本中正弦函数优化技术的演进,从传统查表法到实时计算的创新实践。通过定点数优化、对称性利用和分段线性插值等关键技术,实现了在嵌入式电机控制中的高效三角函数计算,显著提升性能和资源利用率。

weixin_28273593的博客 452

【EPICS学习记录】根据官方教程创建一个IOC应用

参照官网给出的IOC创建教程逐步操作完成了一个IOC应用的创建,官网教程中有部分过程表述的不清晰,自己摸索之后完成了IOC的创建,并把流程记录下来。其中有一些操作不是很理解,有问题或者建议欢迎指正。

yifeng_H的博客 3661

iOS: NSCoding Protocol的方法encodeWithCoder:

- (void)encodeWithCoder:(NSCoder *)encoder 对调用这个方法的对象进行编码。

Alisa200920的专栏 1142

YOLO26涨点改进 | YOLO联合Mamba火热发论文改进篇 | CVPR 2025 | 引入EfficientViM 新型轻量级视觉Mamba,高效捕捉全局依赖,含二次创新、适合目标检测任务

本文提出EfficientViM,一种基于HSM-SSD的新型轻量级视觉Mamba架构,用于改进YOLO26目标检测模型。该模块通过压缩隐藏状态、多阶段特征融合和内存优化设计,在降低计算复杂度的同时提升检测精度。实验表明,EfficientViM在ImageNet-1K上实现了最佳的速度-精度平衡,相比SHViT模型性能提升0.7%且速度更快。文章详细介绍了模块原理、网络结构、核心代码实现及YOLO26集成方法,提供两种改进方案,适用于资源受限环境下的实时目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 176

IOS 利用运行时机制来进行归档解档

IOS 利用运行时机制来进行归档解档

AFun_day的博客 340

华为OD机试 新系统真题-收集灵草(Java/Py/C++/Go/C/Js)

华为OD机试 新系统真题【收集灵草】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【收集灵草】多语言题解。

qq_45776114的博客 552

FPGA原型验证(八):SoC设计适配与实现策略

时钟门控在SoC设计中很常见,应该小心处理门控时钟,以成功地在FPGA上原型化SoC设计。现代FPGA综合工具在正确约束的情况下,可以自动处理大多数门控时钟。通过遵循本章中的指导方针,即使具有复杂时钟门控的SoC设计也可以得到处理,并成功地在FPGA上进行原型化。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 477

数据存储-OC

iOS数据存储1. 概论在iOS开发中数据存储的方式可以归纳为两类: 存储文件 和 存储到数据库.2.文件存储2.1 沙盒 文件下载思路: 客户端发送请求->服务器响应,返回NSData->客户端接受数据; 沙盒机制(sandbox):每个iOS应用都有自己的应用沙盒,即文件系统目录.属于封闭式的,所有APP都在单独的沙盒中运行;为了:1⃣️完美的用户体验需要对跨应用程序进行整合统一;2⃣️封

梦浮生清月夜 982

Spring AI Alibaba实战训练营-05模型输出质量评估

本文介绍了使用Spring AI Alibaba库评估AI模型输出质量的方案。项目通过5种评估器实现自动化评估:相关性评估、事实准确性评估、答案相关性评分、答案正确性评估和忠实度评估。开发步骤包括环境准备(Java 17、Maven、API Key获取)、创建Maven项目、配置Spring AI(通过环境变量安全设置API Key)以及实现RAG流程。重点强调了通过评估器自动检测AI输出的质量指标,帮助开发者优化AI应用性能。

program哲学 218

iOS - 数据的归档和反归档

本篇文章主要介绍利用 NSKeyedArchiver 和 NSKeyedUnarchiver 对数据进行归档和反归档的操作。

Veggie的博客 1387

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

iOS 数据持久化方式 - 归档 反归档

所谓归档:将复杂对象转化为NSData类型数据(复杂-->归档-->NSData--->WriteToFile) 注意:归档是将对象转化为数据字节,以文件的形式存储在磁盘上, 所谓反归档:将NSData类型数据转化为复杂对象(读取文件-->NSData-->反归档--->复杂对象) 再说归档之前,先说下iOS的数据持久化方式: 那么问题来了,什么是数据持久化? 数据持久化(侠义的

xuejunrong的博客 7676

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IOS三种归档(NSKeyArchieve)的总结

IOS三种归档(NSKeyArchieve)的总结 归档是一种IOS中常用来存储文件的一种方法,在面向对象的语言中,归档也就实际上可以将一切对象存储在文件中,以下是IOS开发中常见的三种文件归档方式,分别是简单归档、data归档、自定义归档。现分别总结如下: 1、简单归档: 简单归档是指把简单的字符串、数组等对象进行归档。用到的方法是archiveRootObject,语句为...

aibiao0099的博客 366

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ios 归档解归档

iOS 归档的记录   归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),浏览网上的一些资料后,并结合自己的一些经验,总结成此文。 一、使用archiveRootObject进行简单的归档   使用NSKeyedArichiver进行归档、NSKeyedUnarchiver进行接档,这种方式会在写入、读出数据之前对数据进

changwen6 558

iOS开发之归档

iOS开发中,我们可能需要将一些内存中的数据存储到本地中,以便下次进入程序的时候使用,这个时候我们就需要归档,其实,就是将一些对象进行编码保存到磁盘中,然后再使用的时候再对这些数据进行解码,然后使用。涉及到的类为NSKeyedArchiver和NSKeyedUnarchiver。下面我们来看一个例子,例如我们从服务器上取到了一些xml数据,然后经过解析之后,我们可能想要把解析出来的数据保存到硬盘中

lypcareer的专栏 451

iOS:文件归档和解归档的详解和使用

文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份。解归档,就是从磁盘上读取该文件下的数据,用来完成用户的需求。对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径的读取文件的内容(也称为接档,反序列化),(对象归档的文件是...

dienangpiao2051的博客 374

ios归档及存储

要点: 1、归档即我们常说的序列化,有归档当然就有反归档,反归档即我们常说的反序列化。iOS对NSObject对象进行归档,前提是该对象实现了NSCoding协议; Foundation中的NSString、NSDictionary、NSArray、NSMutalbeString、NSMutalbeDictionary、NSMutableArray都直接或间接实现了NSCoding协议,所以你可以使用类方法:NSKeyedArchiver archivedDataWithRootObject:将对象归档为N

qianlima210210的专栏 1500

ios NSKeyedArchiver归档

iOS 归档是数据持久化的一种,可以将一些数据保存到本地 存储单个数据 // 拼接本地路径 NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSString *filePath = [path stringByA...

没毛病的博客 547

iOS归档、反归档

- (void)viewDidLoad {     [super viewDidLoad];           //**************** 归档 ************************ //     // NSArray *eng = @[@"张飞",@"关羽",@"刘备"]; //    //1.创建一个可变的Data //

你有故事,我囿酒 551

ios之归档demo

ios对自定义对象的归档。首先需要实现NSCoding与NSCopying接口 #import <Foundation/Foundation.h> @interface Person : NSObject<NSCoding, NSCopying> @property (copy,nonatomic)NSString *name; @property(a...

147

iOS 归档缓存

代码如下: 头文件定义 // 归档缓存内容 + (void)archiverObject:(id)object byKey:(NSString *)key withPath:(NSString *)path; // 解归档缓存内容 + (id)unarchiverObjectByKey:(NSString *)key withPath:(NSString *)path; 方法实现 + (...

gsl111000的博客 228

iOS archive(归档)的总结

归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存。看过了网上的一些归档的资料之后,结合自己的一些经验,总结一下。 本文包括三个方面的知识,1)单个对象的归档 2)多个对象的归档 3)自定义对象的归档。

Coding & Music & Fitness 3476

iOS 数据归档解档

文章目录简介普通数组的归档解档归档解档多个普通对象同时归档解档归档解档自定义对象的归档解档Student.hStudent.m归档解档 简介 本篇文章使用NSKeyedArchiver和NSKeyedUnarchiver进行iOS的归档解档 归档:即将数据写入文件里。一般我们app的数据都是在内存里,只要app关闭,数据就会丢失。但是将数据保存在文件里,就能将数据保存至本地,不管app关闭还是重...

吃橘子 1919
上一篇: iOS属性列表序列化
下一篇: 详解Objective-c Block应用
backapace
博客等级 码龄16年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值