NSCoder:班级如何知道我们传递的对象?

时间:2013-08-20 19:13:46

标签: ios serialization encode

关于decoding已经存在类似的问题,但我想尝试总结一下,看看我是否能够全面了解。

基本上Apple提供了NSCoder类,如果它是NSCoding类的sublcass,它允许对对象进行编码和解码。

继承该类允许使用Apple提供的NSCoder编码和解码函数,允许“序列化”NSDataTypes(以及所有原始C结构和数据类型)。

我对NSCoder class reference的理解是encodeObject函数能够检测我们传递的对象类型,从而以正确的方式对其进行序列化。

Instaed,当使用特定类型的int(例如int 64)时,Apple决定提供一个特定的函数,因为理解数据的“签名”并不是那么简单(我想在低水平内存中int64是相对类似的一个int作为原始数据类型,因此没有NSObject“签名”,Apple可以从中反向设计数据类型。)

我的理解是否正确?有人有不同的解释吗?

我还想问你一些关于“ encodeRootObject ”功能用法的更多解释。参考资料并没有太多,我从一些代码示例中看到过。我知道archiveRootObject用于实际保存对象,但什么时候应该使用encodeRootObject?当我尝试编码我定义的类的对象时使用这个吗?

1 个答案:

答案 0 :(得分:2)

...关闭

NSCoder是一个协议,而不是一个类,因此您不会继承它,而是实现它。您可以从另一个实现协议的类继承,但是您始终需要实现编码和解码方法,以指定如何处理类内容。

encodeObject将存储有关正在编码的类的一些“元数据”,以便它知道在解码期间应该重新创建的类的类型。