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/ 什么是对象序列化 在 ...
随机推荐
- SCCM部署win7操作系统,系统盘为D盘
SCCM部署win7操作系统,系统盘为D盘 1. 系统部署完毕之后是这样的 2.解决方案 解决分发干净Windows7操作系统盘符为”D”的方法也比较简单. 在SCCM管理控制台中,打开”软件库””操 ...
- Windows文本文件编码
目录 1 ANSI编码 2 2 UTF16BE编码 2 3 UTF16LE编码 2 4 UTF-8编码 2 5 BOM 3 6 乱码 3 7 总结 5 如下图 ...
- 你的java 代码对JIT编译友好吗?
JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中 ...
- as(C# 参考)
原文地址:https://msdn.microsoft.com/zh-cn/library/cscsdfbt(v=vs.110).aspx 可以使用 as 运算符执行转换的某些类型在兼容之间的引用类型 ...
- hibernate的懒加载问题
产生原因: 当使用hibernate查询一个对象的时候,如果Session关闭,再调用该对象关联的集合或者对象的时候,会产生懒加载异常! 解决方案: 方案一: 在Session关闭之前,查询对象关联的 ...
- Java集合涉及的类(代码)
Customer: public class Customer implements Comparable{ private Integer customerId; pri ...
- HTTP脚本化——XMLHttpRequest对象的学习笔记
一. HTTP 请求和响应 一个HTTP请求由4部分组成 HTTP请求方法(也叫动作Verb) 正在请求的URL 一个可选的请求头集合(可能包含身份验证信息等) 一个可选的请求主体 服务器返回的HTT ...
- git常用语法
git笔记 1. 获取项目(克隆): Git repository: git clone -b develop ssh://git@68. ...
- Kafka简要图解
LinkedIn贡献的分布式消息系统 - 请参考这里 kafka集群:producer写入消息,consumer读取消息 消息分为不同主题,每个主题可以分为多个partition(并行),每个part ...
- oracle之to_char,to_date用法
[转载自]http://www.jb51.net/article/45591.htm 这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星 ...