Object encoding编码方式

34 篇文章 0 订阅

1 前言

    这是一篇关于对象编码和解码的介绍文章,比较晦涩,主要讲的是对象编码和解码操作是用来做什么的,和怎么进行编码和解码操作。

    原文链接:http://blog.csdn.net/developer_zhang/article/details/12039055

2 详述

    对象编码转换一个对象类标志和状态成为一种可以在两个进程中被存储或者转换的格式。类型和实例数据被写成可以在一个程序结束后存储的字节流。当程序再次运行,一个新的分配对象可以解码并且存储它自己的表示并且重新存储自己为之前的运行状态。编码常常与把对象的图形放到一个可以被写入到系统文件中的格式(一个归档)的归档一致;在归档中的解档操作,询问每一个存储的图形中的对象来解码他自己。

    对象解码也被应用在用于OS X分布式对象API中传递对象从一个进程到另一个。然而,它最普遍的使用是像一个属性列表的归档,对象持久操作的原理。

2.1 如何编码和解码对象

    对我们的用来编码和解码它实例的子类,它必须遵循NSCoding协议和实现的两个方法:initWithCoder:和encodeWithCoder:。当一个程序解档或者归档一个对象图形,这些方法被调用。在encodeWithCoder:方法中,我们编码一个对象的重要实例变量的值;在initWithCoder:方法中,我们解码这些值并且再分配他们到他们的实例变量中。如果一个对象接受了initWithCoder:信息,他的初始化方法则不会被调用。

    initWithCoder:和encodeWithCoder:的唯一参数为一个他的目标是执行实际的编码和解码操作的NSCoder对象。因为NSCoder是一个抽象的类,编码对象大部分情况下为属于下列具体子类实例中的:NSKeyedArchiver,NSKeyedUnarchiver,NSArchiver,NSUnarchiver。归档对类声明编码一个对象实例变量的方法;解档类声明解码实例变量的方法。

    NSCoder方法使用在对象,数字,C数组,结构体,字符串和其他类型的指针。在我们编码或者解码我们自己的类的一个实例变量之前,确定第一个调用父类的initWithCoder:或者encodeWithCoder:方法的实现。当我们从字节流中解码对象的时候,确定当我们assign他们或者他们的实例变量的时候retain或者copy他们。

2.2 键和连续的归档

    两个具体的NSCoder子类的根本的方式是相互之间不同的。“keyed”归档类(NSKeyedAchiver和NSKeyedUnarchiver)以一个字符串键值关联一个编码的值并且当解码这个值的时候用同样的键值。而且实例变量可以被编码和解码在任何的队列中。通过coder(NSArchiver和NSUnarchiver)的其他类型我们可以编码实例变量在一个确定的队列,并且我们必须解码他们在相同的队列。而连续的coders应当仅仅被用于遗留的代码;新的子类应该使用“keyed”归档代码。

3 结语

    以上所有内容,希望对大家有所帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值