NSCoder类

1,概述

将对象的实例变量和其他数据编码为数据块,然后将他们存在到磁盘当中;以后将这些数据块读回到内存中,并且还基于保存的数据创建新的对象,也称序列化或反序列化。

2,用法

a,首先,定义一个类,使其遵守<NSCoding>协议

@interface Thingie: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)mn

shoeSize:(float)ss;

@end//interface Thingie

实现类

@implementation Thingie

@synthesize name;

@synthesize magicNumber;

@synthesize shoeSize;

@synthesize subThingies;

-(id)initWithName:(NSString *)n

magicNumber:(int)mn

shoeSize:(float)ss{

if(self==[super init]){

self.name=n;

self.magicNumber=mn;

self.shoeSize=ss;

self.subThingies=[NSMutableArray array];

}

return self;

}

实现<NSCoding>协议中的-encoderWithCoder和-initWithCoder

接以上代码

-(void)encoderWithCoder:(NSCoder*)coder{

[coder encodeObject:name

forKey:@"name"];

[coder encodeObject:magicNumber

forKey:@"magicNumber"];

[coder encodeObject:shoeSize

forKey:@"shoeSize"];

[coder encodeObject:subThingies

forKey:@"subThingies"];

}//encodeWithCoder

-(id)initWithCoder:(NSCoder *)decoder{

if(self=[super init]{

self.name=[decoder decodeObjectForKey:@"name"];

self.magicNumber=[decoder decodeIntForKey:@"magicNumber"];

self.shoeSize=[decoder decodeFloatForKey:@"shoeSize"];

self.subThingies=[decoder decodeObjectForKey:@"subThingies"];

}

return self;

}//initWithCoder

b,再次,使用该类定义一个对象,初始化它。

Thingie *thing1;

thing1=[[Thingie alloc]

initWithName:@"thing1"

magicNumber:42

shoeSize:10.5];

c,定义一个NSData对象,并使用类方法:NSKeydArchiver对对象进行编码后赋值给NSData对象。

NSData *freezeDried;

freezeDried=[NSKeyedArchiver archivedDataWithRootObject:thing1];

d,如果愿意,可以将NSData对象存储到磁盘上

[freezeDried writeToFile:@"/tmp/verbiage.txt"

atomically:YES];

f,解码NSData

thing1=[NSKeyedUnarchiver unarchiverObjectWithData:freezeDried];

3,注意点

如上所示例中,NSMultableArray对象subThingies可以存放各种对象,但是不能存储NSlog类,因为它不能检测对象循环。

最新文章

  1. AOJ 0121: Seven Puzzle【BFS】
  2. C# List.sort排序详解(多权重,升序降序)
  3. 机器学习(4)之Logistic回归
  4. DC DC電路電感的選擇
  5. erlang分布式编程模型
  6. MySQL(Navicat)运行.sql文件时报错[Err] 2006 - MySQL server has gone away 的解决方法
  7. Mysql查询不为null值
  8. Erlang和Web
  9. Spring boot的第一个demo
  10. 干货分享: 长达250页的Libvirt Qemu KVM的ppt,不实验无真相
  11. innobackupex的流备份【转】
  12. List双向链表容器
  13. Effective Java 第三版——76. 争取保持失败原子性
  14. Oracle表被锁无法问题处理
  15. 手机上输入http://192.168.1.102:8888/FiddlerRoot.cer为什么下载不了证书
  16. Linux运维基础命令笔试题--看看你会多少?
  17. vs2017编译网狐荣耀服务端的心得
  18. Python将某文件夹及其子文件夹下某种格式的文件移动到另一个指定的文件下
  19. linq的语法和案例
  20. UASCO Wormholes 解析 and C 语言实现

热门文章

  1. WPF 实现验证码功能
  2. 我的小工具开源一下-PingTest
  3. 基于Xcode8插件开发~一键检测处理头文件引用
  4. 我的Linux软件集
  5. cocos2dx内存管理的个人理解
  6. Java文件中为什么只能有一个public修饰的类, 并且类名还必须与文件名相同
  7. Android实现先横向横线展现在纵向拉开图片
  8. Unsupported major.minor version 52.0错误解决 Ubuntu JDK8 安装配置
  9. Sass与Compass——回顾
  10. java中字符串与数字的互相转换