iOS序列化与反序列化
1到底这个序列化有啥作用?
面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中(来源于某教材的一段话)
本人的理解是当你于写数据需要本地存储时,即将你的数据写到硬盘上的时候,你就必须对他进行序列化,转换成二进制文件,从而便于在磁盘上的读写,同理在取出的时候必须将其在反序列化,这样才能将数据读出来,就好比加密和揭秘的过程。
2 为什么我将数据写到plist 中的时候,也是存储到本地的磁盘上,但是我就没有序列化啊?
大家有没有发现,其实plist 的数据是类型是有限制的,就那么几种特定的数据类型,,nsstring ,大家有没有尝试过将一个自己定义的类放进去(写进plist ),在读出来?
结果是什么大家可以先猜想。
其实在nsstring 的类的定义中已经添加了协议<nscoding> 即他是实现了nscoding 代理的方法的。
@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>
深入
3 NScoder 和 NScoding
NScoding 是一个协议,主要有下面两个方法
-(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据
-(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据
NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。
NSKeyedUnarchiver 从二进制流读取对象。
NSKeyedArchiver 把对象写到二进制流中去。
4一个简单的例子
一般是在自己定义的类中需要在.h 文件中加入<NScoding>
在.m 文件众实现他的的两个代理方法,这个代理方法将会被自动调用
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];
[aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self)
{
self.InsureSolutionID = [aDecoder decodeObjectForKey:@"personName"];
self.InsureSolutionName = [aDecoder decodeObjectForKey:@"personAge"];
}
return self;
}
以上是对该类序列化和反序列化。
NSData *archiveCarPriceData = [NSKeyedArchiver archivedDataWithRootObject:self.DataArray];
[[NSUserDefaults standardUserDefaults] setObject:archiveCarPriceData forKey:@"DataArray"];
NSData *myEncodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"DataArray"];
self.dataList = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
iOS序列化与反序列化相关推荐
- ios序列化与反序列化,本地化
2019独角兽企业重金招聘Python工程师标准>>> 你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨. ...
- iOS 序列化与反序列化
开篇 1到底这个序列化有啥作用? 面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中(来源于某教 ...
- IOS 归档 即序列化与反序列化
IOS 归档 即序列化与反序列化 小弟很久没有更新了 最近在往IOS上靠 IOS中的归档 即是我们所知道的序列化和反序列化 我们可以用plist来存储比较简单的数据类型 但是如果我想把自己定义的类型 ...
- ios php 序列化,PHP常见的序列化与反序列化操作实例分析
本文实例讲述了PHP常见的序列化与反序列化操作.分享给大家供大家参考,具体如下: 1.概念 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 2.序列化 ...
- JSON数据序列化与反序列化实战
一.关于JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.是一种文件规范,绝大多数的编程语言均可以轻松读写.当然python也不 ...
- 【Protocol Buffer】Protocol Buffer入门教程(四):序列化和反序列化
00. 目录 文章目录 00. 目录 01. 数组的序列化和反序列化 02. 字符串序列化和反序列化 03. 文件描述符序列化和反序列化 04. C++ Stream序列化和反序列化 05. 附录 0 ...
- 分享套接字数据包序列化与反序列化方法
分享套接字数据包序列化与反序列化方法 " 简单说一下,本文不涉及Socket的连接.数据接收,只是对数据包(byte[])的序列化和反序列化方法的封装介绍. 本文目录 本文背景 一般操作 本 ...
- Python中json和pickle模快dumps()、loads()、dump()、load()序列化和反序列化实例
在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象.在python的标准库中,专门提供了json ...
- C++实现对象序列化和反序列化(读写二进制文件)操作
相关函数介绍 在我们的C语言中读写二进制文件一般使用的fread.fwrite全局函数,当然也可以使用更底层的read和write函数.在我们的C++中 通过ofstream 和 ifstream 对 ...
最新文章
- 专访:经历了时间检验的不仅是论文,还有唐杰自己 | SIGKDD 2020时间检验奖
- 做弱电机房工程的时候,如何解决机房称重问题?
- Cracking the coding interview--Q1.4
- nginx 免安装包
- 使用SAP CRM中间件XIF(External Interface)一步步创建服务订单
- 【数据库】通用的存储过程
- mac 黑窗口连接mysql_mac上终端起动MySQL的方法
- 常见端口、端口查询及TCP状态
- blui_BLUI:一种创建游戏UI的简单方法
- 面试官十大常问面试问题总结
- 让 ASP.NET AJAX 支持浏览器的 History Navigation - Part 1
- series 锐捷rgrsr20_锐捷RG-RSR20-04E路由器
- 22种手机使用中的常见问题及处理方法
- 零零信安王宇:通过基于VPT的风险管理 用20%的时间去解决80%的风险
- 【踩坑】Win11 WSL2 中 meld 无法正常使用问题修复
- 【B站弹幕数据分析】B站独家付费番剧鬼灭之刃的前12集的弹幕数据分析
- cf各区服务器所在位置,为什么说“黑区”是CF第一服务器
- java版能播flac_Java中如何写FLAC文件实例
- 【体系结构】山东大学计算机体系结构知识点清单
- 互联网+下PDA移动智能手持POS超市收银开单软件
热门文章
- 学python可以做什么知乎-学完Python后能做什么?
- 在python中、下列代码的输出是什么-Python 面试中 8 个必考问题
- 安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef`)
- codeforces C Deletion of Repeats(hash)
- php中需要注意的问题
- Qt设置应用程序图标
- LeetCode Pascal's Triangle
- hdu1753大明A+B
- 基于FCN的图像语义分割
- Netty源码分析第6章(解码器)----第4节: 分隔符解码器