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类,因为它不能检测对象循环。

Objective-C日记-之编码对象属性的更多相关文章

  1. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  2. JavaScript对象属性的基础教程指南

    JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...

  3. Js基础知识7-JavaScript所有内置对象属性和方法汇总

    对象什么的,程序员可是有很多呢... JS三大对象 对象,是任何一个开发者都无法绕开和逃避的话题,她似乎有些深不可测,但如此伟大和巧妙的存在,一定值得你去摸索.发现.征服. 我们都知道,JavaScr ...

  4. Js基础知识2-对象、对象属性全解

    Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...

  5. 浅析JavaScript访问对象属性和方法及区别

    属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸.跳跃等. 在JavaScript中通常使用”."运算符来存取对象的属性的值.或 ...

  6. JavaScript 访问对象属性和方法及区别

    这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...

  7. js 内置对象属性及方法

    1.Date 属性(1): constructor      所建立对象的函数参考 prototype       能够为对象加入的属性和方法 方法(43): getDay()        返回一周 ...

  8. js对象属性方法大总结(收集)

    数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...

  9. BeanUtils对象属性copy的性能对比以及源码分析

    1. 对象属性拷贝的常见方式及其性能 在日常编码中,经常会遇到DO.DTO对象之间的转换,如果对象本身的属性比较少的时候,那么我们采用硬编码手工setter也还ok,但如果对象的属性比较多的情况下,手 ...

随机推荐

  1. Java线程: 线程调度

    线程调度是Java多线程的核心,只有好的调度,才能充分发挥系统的性能,提高程序的执行效率. 一.休眠 休眠的目的是使线程让出CPU的最简单做法,线程休眠的时候,会将CPU交给其他线程,以便轮换执行,休 ...

  2. 在Node.js中使用RabbitMQ系列二 任务队列

    在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心 ...

  3. 消息队列NetMQ 原理分析2-IO线程和完成端口

    消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...

  4. IOS解析XML

    XML也许是我们储存数据和通讯数据中最常见的一种简易方式,当我们来到XML的海洋时,我们会发现当我们用iPhone程序解析XML时,我们是有如此多的选项,让人眼花缭乱.iOS SDK本身就带有两种不同 ...

  5. web开发的性能准则(减少页面加载时间方面)

    准则(概述) 减少 HTTP 请求 使用CDN加速 避免空的src或href属性值 增加过期头 启GZIP压缩 把css文件放到头部 把javascript放到尾部 避免使用css表达式 删除不使用的 ...

  6. 1activiti认识和数据库和插件配置

    工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者之间按照某种预定义的规则自动进行传递文档.信息或任务的过程, 从而实现某个预期的 ...

  7. STM32单片机学习心得——概述

    我校的课程真是跟不上时代发展,甚至还在教授8051/8052单片机的内容,于是不甘寂寞的我就自己踏入了STM32单片机的坑-- 首先,我现在大二,刚学完模拟电子技术,还没有学习数字电路技术,于是自学单 ...

  8. 为什么亚马逊云计算中的DNS服务叫Route53?

    最近在用亚马逊的云计算服务,看到它的DNS服务的名字叫做"Route 53".这个名字让我很好奇,为什么叫"Route 53"呢?有什么特殊含义? 看到了这个Q ...

  9. HTML5部分元素

    Document HTML4文档声明 : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &qu ...

  10. Apache Pig处理数据示例

    Apache Pig是一个高级过程语言,可以调用MapReduce查询大规模的半结构化数据集. 样例执行的环境为cloudera的单节点虚拟机 读取结构数据中的指定列 在hdfs上放置一个文件 [cl ...