摘自:http://hi.baidu.com/popln/blog/item/c3dd9302bb37e994d43f7ccb.html

开篇

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];

最新文章

  1. BZOJ 1121: [POI2008]激光发射器SZK
  2. spring3.0注解
  3. linux -- 基于mysql tomcat 部署web项目
  4. SPOJ #440. The Turtle&#180;s Shortest Path
  5. innodb_io_capacity &gt;=innodb_lru_scan_depth*inoodb_buffer_pool_instances。与 checkpoint
  6. n-1位数
  7. WindowManager
  8. composer在ubuntu下安装
  9. 移除UIView上面的所有控件
  10. POJ 1184 聪明的打字员
  11. 重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState, VisualStateManager
  12. 如何将linux用在开发环境中的
  13. 《天书夜读:从汇编语言到windows内核编程》五 WDM驱动开发环境搭建
  14. Chrome浏览器的使用
  15. GIT入门笔记(16)- 分支创建和管理
  16. idea如何快速查看接口的实现类
  17. Java当中的IO三
  18. leetcode — construct-binary-tree-from-preorder-and-inorder-traversal
  19. 《JAVA程序设计》_第五周学习总结
  20. P3810 -三维偏序(陌上花开)cdq-分治

热门文章

  1. 转载:oracle 11g ADG实施手册(亲测,已成功部署多次)
  2. node 文件、文件夹 增删改查
  3. 96D - Police Stations
  4. vue.js选择if(条件渲染)详解
  5. R语言plot函数参数合集
  6. vsftpd配置手册(实用)
  7. Mac安装软件时 提示已损坏的解决方法
  8. Confluence 6 使用 LDAP 授权连接一个内部目录 - 用户 Schema 设置
  9. iterator not dereferencable问题
  10. POJ-1180 Batch Scheduling (分组求最优值+斜率优化)