IOS 对象序列化与反序列化NSKeyedUnarchiver
来源:互联网 发布:天下3最帅捏脸数据 编辑:程序博客网 时间:2024/05/16 04:57
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];
0 0
- IOS 对象序列化与反序列化NSKeyedUnarchiver
- IOS 序列化与反序列化 NSKeyedUnarchiver
- IOS 序列化与反序列化 NSKeyedUnarchiver
- IOS 序列化与反序列化 NSKeyedUnarchiver
- iOS 序列化与反序列化 NSKeyedUnarchiver
- IOS 序列化与反序列化NSKeyedUnarchiver
- iOS 对象序列化与反序列化
- NScoder / NScoding (iOS对象序列化与反序列化)
- swift IOS中对象序列化与反序列化
- 对象序列化与反序列化
- 序列化与反序列化对象
- 对象序列化与反序列化
- 对象序列化与反序列化
- 对象序列化 与反序列化
- 对象序列化与反序列化
- 对象序列化与反序列化
- 对象序列化与反序列化
- 对象序列化与反序列化
- 第六周 项目一 深复制体验(1.2)
- 自定义控件之:treelistCombox 下拉树列表
- 无线充电各种原理方案的比较
- 4. RCC外设的学习和理解
- 限制printk打印频率函数printk_ratelimit
- IOS 对象序列化与反序列化NSKeyedUnarchiver
- PHP数组
- windows下 使用 ffmpeg 解码显示编码为H264的RTSP流
- cf.Exam
- Chang'an(Hack-01分数规划)
- C语言强化(三)求子数组的最大和
- windows系统快捷键
- ACE开发环境搭建
- Html 基础