iOS经典讲解之复杂对象的数据持久化-归档与反归档

ios模型的归档和解档 只要继承了SKBaseModel这个基类,自动就实现了归档和解档的方法,然后在控制器中实现相应的存贮方法即可,选好存储的路径 非常的简单,而且自动的识别你所添加的属性 立即下载
自定义类Person.h

@interface PersonModel : NSObject <NSCoding>
/** *  复杂对象最持久化 需要遵守一个协议<NSCoding>
 */
@property (nonatomic, retain) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, retain) NSData *data;
@end

Person.m

#import "PersonModel.h"

@implementation PersonModel

-(void)dealloc
{

    [_name release];
    [_data release];
    [super dealloc];
}
// 对复杂对象持久化叫做归档与反归档(编码与解码)

// 归档方法 编码成可以持久化的格式(归档时调用)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    // 对每一个属性都要进行重新编码
    // 注意:属性的类型
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeObject:self.data forKey:@"data"];


}
// 反归档方法 解码的过程(反归档时调用)
-(id)initWithCoder:(NSCoder *)aDecoder
{
    //
    self = [super init];
    if (self) {

        // 解码的过程
        // 和编码一样 除了对象类型外也是有特殊解码方法
        // 注意:编码时候给的key要和解码key一样
        self.name = [aDecoder decodeObjectForKey:@"name"];
        //注意类型
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.data = [aDecoder decodeObjectForKey:@"data"];

    }
    return self;

}

-(void)setValue:(id)value forUndefinedKey:(NSString *)key
{
    // KVC赋值保护方法
}
@end

实现归档与反归档代码:

#import "RootViewController.h"
#import "PersonModel.h"
#define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]
@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self archiver];
    [self unArchiver];

}
// 复杂对象归档
- (void)archiver
{
    // 初始化对象

    PersonModel *model = [[PersonModel alloc] init];
    // 赋值对象
    model.name = @"悟空";
    model.age = 500;
    // 将 图片转化成data
    // 把一个png格式的转化为data
    model.data = UIImagePNGRepresentation([UIImage imageNamed:@"pic2"]);

    // 创建一个可变data 初始化归档对象
    NSMutableData *data = [NSMutableData data];
    // 创建一个归档对象
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    // 进行归档编码
    [archiver encodeObject:model forKey:@"JJModel"]; //此时调用归档方法encodeWithCoder:

    // 编码完成
    [archiver finishEncoding];
    // 实际上归档 相当于把编码完的对象 保存到data中
    NSLog(@"%@", data);
    // 把存有复杂对象的data写入文件中进行持久化

    // 路径
    NSString *dataPath = [kDocumentPath stringByAppendingPathComponent:@"JJModel.da"];
    // 写入方法
    [data writeToFile:dataPath atomically:YES];
    // 释放归档对象
    [archiver release];
    NSLog(@"%@", dataPath);

}
// 反归档 解码的过程
- (void)unArchiver
{
    // 创建反归档对象
    // 获取刚才归档的data
    NSString *dataPath = [kDocumentPath stringByAppendingPathComponent:@"JJModel.da"];
    NSData *data = [NSData dataWithContentsOfFile:dataPath];
    NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    // 解码返回一个对象
    PersonModel *model = [unArchiver decodeObjectForKey:@"JJModel"]; // 此时调用反归档方法initWithCoder:
    // 反归档完成
    [unArchiver finishDecoding];
    // 释放反归档对象
    [unArchiver release];
    UIImage *image = [UIImage imageWithData:model.data];
    NSLog(@"%@", model);
}
@end


iOS 数据持久化(二)对象归档ArchiverDemo iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data。 本文介绍对象归档来持久化数据。归档的作用就是将对象以文件的形式保存到磁盘中,以使得数据序列化和持久化。 使用归档的时候读取该文件保存路径来读取文件的内容,归档的文件是进行过保密处理的,在磁盘上是无法查看文件的内容的,这也是和属性列表的区别:属性列表是明文,可以直接从磁盘查看其内容。 立即下载

相关推荐

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

IOS 数据存储(NSKeyedArchiver 归档篇)

什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储。 归档的作用 之前将数据存储到本地,只能是字符串、数组、字典、NSNuber、BOOL等容器类对象,不能将自定义对象进行保存,而通过归档能将所有的对象转化为二进制数据存储到文件中。 归档的缺点 归档保存数据,只能一次性归档保存以及一次性解压。所以只...

weixin_30919429的博客 370

避坑指南:华为2288H-V5服务器安装系统时常见的RAID与驱动问题解决方案

本文针对华为2288H-V5服务器在安装系统时常见的RAID与驱动问题,提供了详细的避坑指南。文章深度解析了从BIOS版本兼容性核查、RAID配置实战到驱动加载与集成的全流程,重点解决了安装过程中因RAID控制器驱动缺失或兼容性问题导致的硬盘无法识别等典型故障,帮助用户高效完成系统部署。

weixin_29240711的博客 980

【iOS】文件(对象数据)的归档和解档

本文对iOS开发中数据持久化方法之一 --- 归档解档进行了学习,包括对单个对象、自定义对象、多个对象的归档和解档

XY_Mckevince的博客 1109

告别信号毛刺!手把手教你用ADS和IBIS-AMI模型搞定PCIe Gen3眼图仿真

本文详细介绍了如何使用Keysight ADS和IBIS-AMI模型进行PCIe Gen3眼图仿真,解决高速信号传输中的信号质量问题。从仿真环境搭建、S参数预处理到眼图优化与故障排除,提供了一套完整的工程实践指南,帮助工程师提升PCIe Gen3接口的信号完整性。

weixin_28366053的博客 370

Kisssoft软件在行星齿轮设计上的初试

行星齿轮传动与链传动相比较,具有质量小,体积小,承载能力强,传动比大,传动效率高等优点,但在行星齿轮传动种种优点下,不可避免的带来一些缺点,对其材料的要求过高,在追求传动比大而体积小的同时,其传动结构大大的复杂化,以及在制造和安装过程中较困难,对于行星齿轮传动设计来说,不仅应该了解其优点,而且应该在设计中,充分发挥其优点,且把其缺点降低到最低的限度。从而才能设计出性能优良的行星齿轮传动装置,为我们赛车提供更加强大的动力保证。 Kisssoft软件为我们行星齿轮传动设计提供了一体化方案,从设...

m0_69808569的博客 1万+

IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)

IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)

weixin_44519342的博客 645

小白跑WRF第三天,安装三方依赖库

小白跑WRF第三天,安装三方依赖库各类安装包的准备 各类安装包的准备 官网教程:https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php 根据官网教程需要的安装包有以下几个 系统环境 用途 zlib-1.2.7 zlib是提供数据压缩用的函式库。 netcdf-4.1.3 读nc文件的。 mpich-3.0.4 用于并行运算的工具。 libpng-1.2.50 libpng是一款C语言编写的比较底层

weixin_42372313的博客 1万+

iOS数据持久化---对象归档

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33735077的博客 118

无源定位之时差估计的精确时差估计算法(ETDE)及MATLAB实现程序

时差估计算法之精确时差估计(ETDE)欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想

伊谢尔伦的林中小路 4255

YOLO26涨点改进 | 独家创新,细节涨点改进篇 | CVPR 2025顶会 | YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文

本文给大家介绍Mona即插即用模块, 含MoCAA和DyTMona二次创新模块优化YOLO26模型。YOLO26引入 Mona通过引入多尺度视觉友好型卷积滤波器(如3x3、5x5、7x7深度卷积)和可伸缩归一化层来优化适配器设计,以更好地处理视觉信号并调节输入特征分布。YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文。适合目标检测、图像分割、图像分类等所有CV任务通用即插即用模块。

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

iOS 对象持久化之- 归档 archiving

在理解归档之前,首先要理解对象图(object graph)的概念,对象图就是对象之间经由指针等关系链接在一起形成的对象之间的关系图。 我们需要将这个对象体系或其部分对象持久化保存到文件中,在以后某时刻从文件中恢复出来之前的对象体系,这就是持久化要达成的目标。cocoa中已经实现了两种用于持久化的文件类型,就是nib文件和property list文件。 这两种文件对于要持久化到文件中的对象类

天行健 2156

Amber&pdb4amber | 准备PDB文件

PDB文件中唯一需要或有用的数据来设置AMBER模拟是:原子名称,残基名称,也许还有链标识符(如果存在多条链),以及重原子的坐标。除非加载额外的文库,否则非蛋白质结构(特别是低分子量配体)会引起问题;如果它们在PDB文件中的名称对应于AMBER库中的内部名称,则通常会识别水和单原子离子。–dry选项移除结构中的结晶水和–reduce选项在最理想的位置添加氢原子.为tleap程序调整从外部获得的PDB文件。

ASKCOS博客 897

ios 数据存储之四:解归档存储

一、什么是归档: 归档: 对象归档是将对象以文件的形式保存到磁盘中(也称为序列化,持久化) ;使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化)。 二、归档 与 plist存储的区别: 对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而plist属性列表是明文的可以查看。 而plist只能保存这几种类型:NSString NSNumber NSDate NSDat...

Z1591090的博客 1127

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS中实现归档和反归档

///////////////////////让model遵守协议 #define kactivityNum @"activityNum" #define kalsoNeedKll @"alsoNeedKll" @interface UserModel () NSCoding> @e

whuizhou的专栏 918

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ios的 对象归档

IOS提供的数据持久化方式有:SQLite、CoreData、属性列表、NSUserDefault、对象归档。 这里来简单介绍下对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为接档,反序列化), (对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看)。 对象归档有两种方式:...

weixin_30332241的博客 216

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS 对指定Model实现自动归档

.h #import #import "ZJBModel.h" #import "AutoCoding.h" /* 某个用户 (自己/别人) */ @interface UserModel : ZJBModel /* 命名方式 OC/Java都是遵守驼峰原则/波浪命名方法      在PHP, Linux里面命名是按照 _ 隔开 全小写命名  */ @property

探路者_iOS 923

iOS疯狂详解之复杂对象归档反归档

需求:对复杂对象进行归档 反归档 复杂对象:工程中 自定义的数据模型类 例如一个Person类 Person.h // // Person.h // MySandBox // // Created by long on 15/9/15. // Copyright (c) 2015年 WLong. All rights reserved. // #import @inter

wangLongBlog的专栏 1608

iOS 对模型对象进行归档

归档是指一种形式的序列化,专门编写用于保存数据的任何对象都应该支持归档。使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们。 只要在类中实现的每个属性都是标量或者都是遵循NSCoding协议的某个类的实例,你就可以对整个对象进行完全归档。大多数的Foundation和Cocoa Touch类 都遵NSCoding协议,所以对于有大多数类来说,归档不太难。 ...

dfgwang1202的博客 248

iOS - 数据持久化 - 文件的写入(简单对象和复杂对象)

数据持久化的本质    - 数据保存成文件,存储到程序的沙盒中                                     - 在应用程序结束时,将内存中的数据以文件的形式搬到(保存到)硬盘中 沙盒机制(Sand box):是个安全机制  - 这就是ios和Mac系统安全的原因,就是因为它采用了沙盒机制 越狱之后沙盒机制被损坏了,应用程序之间可能会相互盗取信息 沙盒其实

u011347072的博客 5469

iOS 对象的归档和反归档(序列化)

在iOS中,对象的序列化和反序列化分别使用NSKeyedArchiver和NSKeyedUnarchiver两个类,我们可以把一个类对象进行序列化然后保存到文件中,使用时再读取文件,把内容反序列化出来。这个过程通常也被称为对象的编码(归档)和解码(解档)。 需要注意的是,NSKeyedArchiver和NSKeyedUnarchiver是继承于NSCoder这个抽象类的,所以我们需要手动实现相应...

我是闰土你是猹的博客 1571

iOS 本地缓存 归档数据模型化

-(void)getHomeurl:(NSString *)url {     NSMutableDictionary *param = [NSMutableDictionary dictionary];     if ([url isEqualToString:KgetHomePageV20]){         

疯狂的程序猿的博客 1578

NSCode对象归档解档

对象编码 预备知识 类定义协议 相关文章 归档属性表对象生命周期 对象编码把对象的类特征以及对象状态转化某种格式,这种格式可存储,也可在进程间传递。类的类型以及实例数据会被写入到某种字节流里面,当程序结束的时候,该字节流可进行持久化。程序启动的时候,新分配对象可以解码之前保存的自身描述,然后把自己恢复到之前运行时的状态。编码通常需和归档协作。归档将对象图转化成一种可以

依然风 | ios 6792

iOS 复杂对象持久化  归档和反归档的过程

复杂对象持久化就是将复杂对象写入文件. 复杂对象就是Foundation 内不存在的数据类 ,他们是无法直接通过writeToFile:方法写入文件的, 只能通过将复杂对象转换为NSData,然后再写入文件,而这里将复杂对象转换成NSData类型的过程就是归档. 同样我们从文件中读取复杂对象是需要先读取NSData类型数据, 再将其转化为复杂对象,这个过程就是反归档

GLongF的博客 454

iOS经典讲解之获取沙盒文件路径写入和读取简单对象

#import @interface RootViewController : UIViewController@end

刘新林的技术博客 1万+

iOS经典讲解之微信SDK更新后需要UniversalLink解决方案

一:微信更新1.8.6的SDK后,在delegate注册时多了一个universalLink参数(如下) + (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink; 不管你是友盟还是ShareSDK等等,只要是最新版的应该都需要这个参数,参考:微信官方文档,经验总结如下。 本文将介绍如何配置U...

刘新林的技术博客 9269
上一篇: iOS经典讲解之获取沙盒文件路径写入和读取简单对象
下一篇: iOS经典讲解之利用单例类封装对SQLite数据库增、删、查、改的操作
刘新林
博客等级 码龄11年 72粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值