iOS对象序列化
系统对象的归档我就不介绍了,这个不复杂,自己看一下就会了。
我在这里主要介绍自定义对象的归档。
Sample.h文件
- //
- // Sample.h
- // Serialization
- //
- // Created by 周 敏 on 12-11-1.
- // Copyright (c) 2012年 周 敏. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- @interface Sample : NSObject<NSCoding> {
- NSString* name;
- int magicNumber;
- float shoeSize;
- NSMutableArray *subThingies;
- }
- @property(copy) NSString* name;
- @property int magicNumber;
- @property float shoeSize;
- @property (retain) NSMutableArray *subThingies;
- -(id) initWithName:(NSString *)n magicNumber:(int)m shoeSize:(float) ss;
- @end
Sample.m文件
- //
- // Sample.m
- // Serialization
- //
- // Created by 周 敏 on 12-11-1.
- // Copyright (c) 2012年 周 敏. All rights reserved.
- //
- #import "Sample.h"
- @implementation Sample
- @synthesize name;
- @synthesize magicNumber;
- @synthesize shoeSize;
- @synthesize subThingies;
- -(id) initWithName:(NSString *)n magicNumber:(int)m shoeSize:(float)ss
- {
- if (self=[super init])
- {
- self.name = n;
- self.magicNumber = m;
- self.shoeSize = ss;
- self.subThingies = [NSMutableArray array];
- }
- return (self);
- }
- -(void) dealloc
- {
- [name release];
- [subThingies release];
- [super dealloc];
- }
- //将对象编码(即:序列化)
- -(void) encodeWithCoder:(NSCoder *)aCoder
- {
- [aCoder encodeObject:name forKey:@"name"];
- [aCoder encodeInt:magicNumber forKey:@"magicNumber"];
- [aCoder encodeFloat:shoeSize forKey:@"shoeSize"];
- [aCoder encodeObject:subThingies forKey:@"subThingies"];
- }
- //将对象解码(反序列化)
- -(id) initWithCoder:(NSCoder *)aDecoder
- {
- if (self=[super init])
- {
- self.name = [aDecoder decodeObjectForKey:@"name"];
- self.magicNumber = [aDecoder decodeIntForKey:@"magicNumber"];
- self.shoeSize = [aDecoder decodeFloatForKey:@"shoeSize"];
- self.subThingies = [aDecoder decodeObjectForKey:@"subThingies"];
- }
- return (self);
- }
- -(NSString*) description
- {
- NSString *description = [NSString stringWithFormat:@"%@:%d/%.1f %@",name,magicNumber,shoeSize,subThingies];
- return (description);
- }
- @end
使用模版
- NSString *path = [NSString stringWithFormat:@"%@/Documents/archive.dat", NSHomeDirectory()];
- Sample *s1 = [[Sample alloc] initWithName:@"thing1" magicNumber:42 shoeSize:10.5];
- [s1.subThingies addObject:@"1"];
- [s1.subThingies addObject:@"2"];
- //序列化
- NSData *data1 = [NSKeyedArchiver archivedDataWithRootObject:s1];//将s1序列化后,保存到NSData中
- [s1 release];
- [data1 writeToFile:path atomically:YES];//持久化保存成物理文件
- //反序列化
- NSData *data2 = [NSData dataWithContentsOfFile:path];//读取文件
- Sample *s2 = [NSKeyedUnarchiver unarchiveObjectWithData:data2];//反序列化
- NSLog(@"%@",s2);
如果是多个这类对象组成的数组,序列化也很简单,只须对这个数组进行序列化。
- Sample *s1 = [[Sample alloc] initWithName:@"thing1" magicNumber:42 shoeSize:10.5];
- [s1.subThingies addObject:@"1"];
- [s1.subThingies addObject:@"2"];
- Sample *s2 = [[Sample alloc] initWithName:@"thing2" magicNumber:22 shoeSize:22.2];
- [s2.subThingies addObject:@"22"];
- [s2.subThingies addObject:@"22"];
- NSArray *array = [NSArray arrayWithObjects:s1, s2, nil];
- [s1 release];
- [s2 release];
- NSString *path = [NSString stringWithFormat:@"%@/Documents/archive.dat", NSHomeDirectory()];
- //序列化
- NSData *data1 = [NSKeyedArchiver archivedDataWithRootObject:array];
- [data1 writeToFile:path atomically:YES];//持久化保存成物理文件
- //房序列化
- NSData *data2 = [NSData dataWithContentsOfFile:path];//读取文件
- NSArray *array2 = [NSKeyedUnarchiver unarchiveObjectWithData:data2];//反序列化
- NSLog(@"%@",array2);
iOS对象序列化的更多相关文章
- 黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile
------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...
- Java对象序列化剖析
对象序列化的目的 1)希望将Java对象持久化在文件中 2)将Java对象用于网络传输 实现方式 如果希望一个类的对象可以被序列化/反序列化,那该类必须实现java.io.Serializable接口 ...
- 理解Java对象序列化
http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 1. 什么是Java对象序列化 Java平台允许我们在内存中创 ...
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- C#对象序列化与反序列化zz
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...
- C#对象序列化与反序列化
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...
- powershell读写磁盘变量(对象序列化)
---[第一章,开篇引子]--- 很久很久以前,我在网上闲逛,看到一头powershell菜鸟,写了一篇感慨道“挖哈哈,我学会powershell啦,我以前很笨,各种不懂,还想把变量保存起来.” 实际 ...
- Java对象序列化---转载
1.概念 序列化:把Java对象转换为字节序列的过程. 反序列化:把字节序列恢复为Java对象的过程. 2.用途 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个 ...
- 【译】Java中的对象序列化
前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...
随机推荐
- Windows高精度时间
目录 第1章计时 1 1.1 GetTickCount 1 1.2 timeGetTime 1 1.3 QueryPerformanceCounter 1 1.4 测试 ...
- Android Studio Gradle构建脚本
Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 构建工具就是对你的项目进行 ...
- 5.7 WebDriver API实例讲解
本节主要详细描述WebDriver的常用API使用方法. 1.访问某网页地址 被测试网页的网址:http://www.sogou.com. Java语言版本的API实例代码: 方法1: public ...
- 为学Linux 我看了这些书
去年开始,抱着学习的态度开始了我的Linux学习,到现在,差不多一年了,收获很多,不敢说精通Linux,但是,还是对得起“略懂”这两个字的.这一年里我看了很多书,细细数下,大概15本左右,其中包含了两 ...
- Excel中的表单控件和active控件
EXCEL中有两种控件:表单控件和active控件 表单控件是excel5和excel95开始使用的,从excel97开始,active控件开始出现 关于表单控件和active控件的区别和使用范围,网 ...
- HTML5自学笔记[ 18 ]canvas绘图基础5
获取图像数据:getImgData(x,y,w,h),返回的是一个ImageData对象,这个对象有三个属性保存图像信息:width/height/data.data是一个数组,保存了每个像素的信息, ...
- (13)odoo翻译
-------------------更新时间:15:52 2016-09-28 星期三 增加模型名翻译17:26 2016-05-20 星期五17:58 2016-05-17 星期二12:14 20 ...
- Python环境的安装
参考官方文档 http://www.runoob.com/python/python-install.html Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上). 您需要下载适用 ...
- Collaborative Filtering
for i=1:6040 Ai=ratings(ratings(:,1)==i,:); for j=1:5 Labnum(i,j)=length(Ai(Ai(:,3)==j)); end num(i) ...
- JSONP的学习(收集整理)
JSONP和JSON之间有什么联系吗? JSON(JavaScript Object Notation) 是一种轻量级.可读的基于文本的的数据交换格式.,是一种轻量的数据交换开放标准.源于JavsSc ...