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序列化与反序列化相关推荐

  1. ios序列化与反序列化,本地化

    2019独角兽企业重金招聘Python工程师标准>>> 你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨. ...

  2. iOS 序列化与反序列化

    开篇 1到底这个序列化有啥作用? 面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中(来源于某教 ...

  3. IOS 归档 即序列化与反序列化

    IOS 归档 即序列化与反序列化 小弟很久没有更新了 最近在往IOS上靠 IOS中的归档  即是我们所知道的序列化和反序列化 我们可以用plist来存储比较简单的数据类型 但是如果我想把自己定义的类型 ...

  4. ios php 序列化,PHP常见的序列化与反序列化操作实例分析

    本文实例讲述了PHP常见的序列化与反序列化操作.分享给大家供大家参考,具体如下: 1.概念 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 2.序列化 ...

  5. JSON数据序列化与反序列化实战

    一.关于JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.是一种文件规范,绝大多数的编程语言均可以轻松读写.当然python也不 ...

  6. 【Protocol Buffer】Protocol Buffer入门教程(四):序列化和反序列化

    00. 目录 文章目录 00. 目录 01. 数组的序列化和反序列化 02. 字符串序列化和反序列化 03. 文件描述符序列化和反序列化 04. C++ Stream序列化和反序列化 05. 附录 0 ...

  7. 分享套接字数据包序列化与反序列化方法

    分享套接字数据包序列化与反序列化方法 " 简单说一下,本文不涉及Socket的连接.数据接收,只是对数据包(byte[])的序列化和反序列化方法的封装介绍. 本文目录 本文背景 一般操作 本 ...

  8. Python中json和pickle模快dumps()、loads()、dump()、load()序列化和反序列化实例

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象.在python的标准库中,专门提供了json ...

  9. C++实现对象序列化和反序列化(读写二进制文件)操作

    相关函数介绍 在我们的C语言中读写二进制文件一般使用的fread.fwrite全局函数,当然也可以使用更底层的read和write函数.在我们的C++中 通过ofstream 和 ifstream 对 ...

最新文章

  1. 专访:经历了时间检验的不仅是论文,还有唐杰自己 | SIGKDD 2020时间检验奖
  2. 做弱电机房工程的时候,如何解决机房称重问题?
  3. Cracking the coding interview--Q1.4
  4. nginx 免安装包
  5. 使用SAP CRM中间件XIF(External Interface)一步步创建服务订单
  6. 【数据库】通用的存储过程
  7. mac 黑窗口连接mysql_mac上终端起动MySQL的方法
  8. 常见端口、端口查询及TCP状态
  9. blui_BLUI:一种创建游戏UI的简单方法
  10. 面试官十大常问面试问题总结
  11. 让 ASP.NET AJAX 支持浏览器的 History Navigation - Part 1
  12. series 锐捷rgrsr20_锐捷RG-RSR20-04E路由器
  13. 22种手机使用中的常见问题及处理方法
  14. 零零信安王宇:通过基于VPT的风险管理 用20%的时间去解决80%的风险
  15. 【踩坑】Win11 WSL2 中 meld 无法正常使用问题修复
  16. 【B站弹幕数据分析】B站独家付费番剧鬼灭之刃的前12集的弹幕数据分析
  17. cf各区服务器所在位置,为什么说“黑区”是CF第一服务器
  18. java版能播flac_Java中如何写FLAC文件实例
  19. 【体系结构】山东大学计算机体系结构知识点清单
  20. 互联网+下PDA移动智能手持POS超市收银开单软件

热门文章

  1. 学python可以做什么知乎-学完Python后能做什么?
  2. 在python中、下列代码的输出是什么-Python 面试中 8 个必考问题
  3. 安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef`)
  4. codeforces C Deletion of Repeats(hash)
  5. php中需要注意的问题
  6. Qt设置应用程序图标
  7. LeetCode Pascal's Triangle
  8. hdu1753大明A+B
  9. 基于FCN的图像语义分割
  10. Netty源码分析第6章(解码器)----第4节: 分隔符解码器