系统对象的归档我就不介绍了,这个不复杂,自己看一下就会了。

我在这里主要介绍自定义对象的归档。

Sample.h文件

  1. //
  2. //  Sample.h
  3. //  Serialization
  4. //
  5. //  Created by 周 敏 on 12-11-1.
  6. //  Copyright (c) 2012年 周 敏. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @interface Sample : NSObject<NSCoding> {
  10. NSString* name;
  11. int magicNumber;
  12. float shoeSize;
  13. NSMutableArray *subThingies;
  14. }
  15. @property(copy) NSString* name;
  16. @property int magicNumber;
  17. @property float shoeSize;
  18. @property (retain) NSMutableArray *subThingies;
  19. -(id) initWithName:(NSString *)n magicNumber:(int)m shoeSize:(float) ss;
  20. @end

Sample.m文件

  1. //
  2. //  Sample.m
  3. //  Serialization
  4. //
  5. //  Created by 周 敏 on 12-11-1.
  6. //  Copyright (c) 2012年 周 敏. All rights reserved.
  7. //
  8. #import "Sample.h"
  9. @implementation Sample
  10. @synthesize name;
  11. @synthesize magicNumber;
  12. @synthesize shoeSize;
  13. @synthesize subThingies;
  14. -(id) initWithName:(NSString *)n magicNumber:(int)m shoeSize:(float)ss
  15. {
  16. if (self=[super init])
  17. {
  18. self.name = n;
  19. self.magicNumber = m;
  20. self.shoeSize = ss;
  21. self.subThingies = [NSMutableArray array];
  22. }
  23. return (self);
  24. }
  25. -(void) dealloc
  26. {
  27. [name release];
  28. [subThingies release];
  29. [super dealloc];
  30. }
  31. //将对象编码(即:序列化)
  32. -(void) encodeWithCoder:(NSCoder *)aCoder
  33. {
  34. [aCoder encodeObject:name forKey:@"name"];
  35. [aCoder encodeInt:magicNumber forKey:@"magicNumber"];
  36. [aCoder encodeFloat:shoeSize forKey:@"shoeSize"];
  37. [aCoder encodeObject:subThingies forKey:@"subThingies"];
  38. }
  39. //将对象解码(反序列化)
  40. -(id) initWithCoder:(NSCoder *)aDecoder
  41. {
  42. if (self=[super init])
  43. {
  44. self.name = [aDecoder decodeObjectForKey:@"name"];
  45. self.magicNumber = [aDecoder decodeIntForKey:@"magicNumber"];
  46. self.shoeSize = [aDecoder decodeFloatForKey:@"shoeSize"];
  47. self.subThingies = [aDecoder decodeObjectForKey:@"subThingies"];
  48. }
  49. return (self);
  50. }
  51. -(NSString*) description
  52. {
  53. NSString *description = [NSString stringWithFormat:@"%@:%d/%.1f %@",name,magicNumber,shoeSize,subThingies];
  54. return (description);
  55. }
  56. @end

使用模版

  1. NSString *path = [NSString stringWithFormat:@"%@/Documents/archive.dat", NSHomeDirectory()];
  2. Sample *s1 = [[Sample alloc] initWithName:@"thing1" magicNumber:42 shoeSize:10.5];
  3. [s1.subThingies addObject:@"1"];
  4. [s1.subThingies addObject:@"2"];
  5. //序列化
  6. NSData  *data1 = [NSKeyedArchiver archivedDataWithRootObject:s1];//将s1序列化后,保存到NSData中
  7. [s1 release];
  8. [data1 writeToFile:path atomically:YES];//持久化保存成物理文件
  9. //反序列化
  10. NSData *data2 = [NSData dataWithContentsOfFile:path];//读取文件
  11. Sample *s2 = [NSKeyedUnarchiver unarchiveObjectWithData:data2];//反序列化
  12. NSLog(@"%@",s2);

如果是多个这类对象组成的数组,序列化也很简单,只须对这个数组进行序列化。

  1. Sample *s1 = [[Sample alloc] initWithName:@"thing1" magicNumber:42 shoeSize:10.5];
  2. [s1.subThingies addObject:@"1"];
  3. [s1.subThingies addObject:@"2"];
  4. Sample *s2 = [[Sample alloc] initWithName:@"thing2" magicNumber:22 shoeSize:22.2];
  5. [s2.subThingies addObject:@"22"];
  6. [s2.subThingies addObject:@"22"];
  7. NSArray *array = [NSArray arrayWithObjects:s1, s2, nil];
  8. [s1 release];
  9. [s2 release];
  10. NSString *path = [NSString stringWithFormat:@"%@/Documents/archive.dat", NSHomeDirectory()];
  11. //序列化
  12. NSData  *data1 = [NSKeyedArchiver archivedDataWithRootObject:array];
  13. [data1 writeToFile:path atomically:YES];//持久化保存成物理文件
  14. //房序列化
  15. NSData *data2 = [NSData dataWithContentsOfFile:path];//读取文件
  16. NSArray *array2 = [NSKeyedUnarchiver unarchiveObjectWithData:data2];//反序列化
  17. NSLog(@"%@",array2);

iOS对象序列化的更多相关文章

  1. 黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile

    ------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

  2. Java对象序列化剖析

    对象序列化的目的 1)希望将Java对象持久化在文件中 2)将Java对象用于网络传输 实现方式 如果希望一个类的对象可以被序列化/反序列化,那该类必须实现java.io.Serializable接口 ...

  3. 理解Java对象序列化

    http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 1. 什么是Java对象序列化 Java平台允许我们在内存中创 ...

  4. java 对象序列化与反序列化

    Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为 ...

  5. C#对象序列化与反序列化zz

      C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...

  6. C#对象序列化与反序列化

    C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...

  7. powershell读写磁盘变量(对象序列化)

    ---[第一章,开篇引子]--- 很久很久以前,我在网上闲逛,看到一头powershell菜鸟,写了一篇感慨道“挖哈哈,我学会powershell啦,我以前很笨,各种不懂,还想把变量保存起来.” 实际 ...

  8. Java对象序列化---转载

    1.概念 序列化:把Java对象转换为字节序列的过程. 反序列化:把字节序列恢复为Java对象的过程. 2.用途 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个 ...

  9. 【译】Java中的对象序列化

    前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...

随机推荐

  1. Windows Server 2012 (2008) 忘记密码重置方法 Windows 10 忘记密码

    要使用windows server 2012安装DVD,选择光盘引导进入 进入修复系统---命令提示符---切换目录至系统目录--执行move命令    先备份  utilman.exe(他就是这个程 ...

  2. MySQL OCP 考试,一个不错的网站

    http://www.aiotestking.com/oracle/category/exam-1z0-883-mysql-5-6-database-administrator/page/10/ 里面 ...

  3. js中tagName和nodeName

    DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2>,其 ...

  4. nodeschool.io 2

    ~~  BABY STEPS  ~~ Write a program that accepts one or more numbers as command-line arguments and pr ...

  5. css -- 题目汇总

    1.描述下浮动和它的工作原理.模块浮动,使其脱离文档流,并且生成一个块级框.(所以父级撑不开就得到了很好的解释) 2.清除浮动的方法有那些,分别适用于什么情形.clear  ,  父级元素overfl ...

  6. Android MotionEvent事件响应机制

    在android中,事件主要包括点击.长按.拖曳.滑动等操作,这些构成了Android的事件响应,总体来说,所有的事件都由如下三个部分作为基础构成: 按下(action_down),移动(action ...

  7. 20145236 《Java程序设计》第4周学习总结

    20145236 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 一.继承 •继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解 ...

  8. linux 安装 php

    1.  libxml2安装           tar -zxvf libxml2-2.6.26.tar.gz cd libxml2-2.6.26 ./configure  --prefix=/usr ...

  9. 注册并启动 Reporting Services SharePoint 服务

    在安装 SharePoint 之前已安装 Reporting Services SharePoint 模式.所以Reporting Services SharePoint 是不能正常使用的. 安装完S ...

  10. 嵌套 click 第二层 click会叠加 导致 触发 多次

    $("#appearHiddenDiv").click(function(){ $("#hiddenDiv").css({display:"block ...