Objective-C日记-之编码对象属性
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日记-之编码对象属性的更多相关文章
- Javascript对象属性与方法汇总
Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...
- JavaScript对象属性的基础教程指南
JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...
- Js基础知识7-JavaScript所有内置对象属性和方法汇总
对象什么的,程序员可是有很多呢... JS三大对象 对象,是任何一个开发者都无法绕开和逃避的话题,她似乎有些深不可测,但如此伟大和巧妙的存在,一定值得你去摸索.发现.征服. 我们都知道,JavaScr ...
- Js基础知识2-对象、对象属性全解
Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...
- 浅析JavaScript访问对象属性和方法及区别
属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸.跳跃等. 在JavaScript中通常使用”."运算符来存取对象的属性的值.或 ...
- JavaScript 访问对象属性和方法及区别
这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...
- js 内置对象属性及方法
1.Date 属性(1): constructor 所建立对象的函数参考 prototype 能够为对象加入的属性和方法 方法(43): getDay() 返回一周 ...
- js对象属性方法大总结(收集)
数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...
- BeanUtils对象属性copy的性能对比以及源码分析
1. 对象属性拷贝的常见方式及其性能 在日常编码中,经常会遇到DO.DTO对象之间的转换,如果对象本身的属性比较少的时候,那么我们采用硬编码手工setter也还ok,但如果对象的属性比较多的情况下,手 ...
随机推荐
- 星级评分条(RatingBar)的功能和用法
星级评分条与拖动条有相同的父类:AbsSeekBar,因此它们十分相似.实际上星级评分条与拖动条的用法.功能都十分接近:它们都是允许用户通过拖动条来改变进度.RatingBar与SeekBar最大区别 ...
- jQuery wrap wrapAll wrapInner使用
jQuery wrap wrapAll wrapInner使用 <%@ page language="java" import="java.util.*" ...
- Libcurl细说
libcurl教程 原文地址:http://curl.haxx.se/libcurl/c/libcurl-tutorial.html 译者:JGood(http://blog.csdn.net/J ...
- Xcode版本太低引发的bug,xcode各种版本下载方式详解
问题描述: mac系统10.9.5 .之前用的xcode 是5.1.接sdk时,一直报错,编译不过去.最后发现原因是xcode版本太低导致的. 于是去网上找xcode历史版本下载.因为系统版本原因,我 ...
- [CSS3] 学习笔记-CSS3盒子样式
1.盒子的类型 在CSS3中,使用display来定义盒子的类型,包括block,inline,inline-block类型.div元素和P元素,属于block类型,span元素和a元素,属于inli ...
- Program terminated with signal SIGKILL,Killed
车载后视镜机器,Liinux + qtUI形式,前后双路,前一天晚上开机用gdb run DvrUI,第二天早上回来一看,机器绿屏卡死了,录像预览停止刷新了,sd录像也停止了.点击无任何反应. 看gd ...
- 全球分布式数据库:Google Spanner(论文翻译)
本文由厦门大学计算机系教师林子雨翻译,翻译质量很高,本人只对极少数翻译得不太恰当的地方进行了修改. [摘要]:Spanner 是谷歌公司研发的.可扩展的.多版本.全球分布式.同步复制数据库.它是第一个 ...
- gevent拾遗
在前文已经介绍过了gevent的调度流程,本文介绍gevent一些重要的模块,包括Timeout,Event\AsynResult, Semphore, socket patch,这些模块都涉及当 ...
- Swift 实现俄罗斯方块详细思路解析(附完整项目)
一:写在开发前 俄罗斯方块,是一款我们小时候都玩过的小游戏,我自己也是看着书上的思路,学着用 Swift 来写这个小游戏,在写这个游戏的过程中,除了一些位置的计算,数据模型和理解 Swift 语言之外 ...
- matlab 向量法建数组(推荐)
一.用赋值的方法可以扩展一个已知的数组: arr= 1:1:4; arr(8)=6; 此时,arr = 1 2 3 4 0 0 0 6 arrNew=arr; 此时arrNew = 1 2 3 4 0 ...