iPhone开发中序列化与反序列化的理解
来源:互联网 发布:apache 虚拟主机 编辑:程序博客网 时间:2024/06/06 21:41
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];
本文出自 “技术成就梦想” 博客http://285746555.blog.51cto.com/2966432/647312
- iPhone开发中序列化与反序列化的理解
- iPhone开发中序列化与反序列化的理解
- 浅谈序列化与反序列化的理解
- 序列化与反序列化的理解
- 浅谈序列化与反序列化的理解
- .Net 中序列化与反序列化的应用
- C#中对象的序列化与反序列化
- C#中对象的序列化与反序列化
- C#中对象的序列化与反序列化
- java中对象的序列化与反序列化
- Java中对象的序列化与反序列化
- Java中对象的序列化与反序列化
- java开发中序列化与反序列化起到的作用
- 序列化与反序列
- 序列化与反序列
- 序列化和反序列化理解
- 对 序列化|反序列化|反射|委托 的理解
- 序列化和反序列化的简单理解
- Binary Tree Maximum Path Sum 二叉树最大路径和 @LeetCode
- 杭电ACM HDU 1081 To The Max
- Java基础(十六)——项目实战——交通灯管理系统
- UITabBar隐藏相关处理
- Cocoa核心概念和内存管理编程指南
- iPhone开发中序列化与反序列化的理解
- 球球已经变生生世世19
- 主线程启动两个线程,并输出BEBEBE……BE...BE的字符串。要求,两个子线程分别连续输出B和E。
- HTTP 请求返回400 等错误的解释
- IOS同步请求和异步请求的区别
- Java基础(十七)——项目实战——银行业务调度系统
- Iphone 和 KVC/KVO
- Notifications
- auto-sync progress bar