【问题标题】:NSCoder: how does the class know which object we pass?NSCoder:类如何知道我们传递的是哪个对象?
【发布时间】:2013-08-22 23:42:12
【问题描述】:

已经有一个关于decoding的类似问题,但我想尝试总结一下,看看我是否得到了完整的信息。

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

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

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

Instaed,当使用特定类型的 int(例如 int 64)时,Apple 决定提供一个特定功能,因为理解数据的“签名”并不是那么简单(我猜在低级内存中 int64 相对相似将 int 作为原始数据类型,因此没有 NSObject “签名”,Apple 可以从中对数据类型进行逆向工程)。

我的理解正确吗?谁有不同的解释?

我还想请你多解释一下“encodeRootObject”函数的用法。参考资料不多,我从一些代码示例中看到了。我知道archiveRootObject 用于实际保存对象,但我什么时候应该使用encodeRootObject?当我尝试对我定义的类的对象进行编码时,是否会使用它?

【问题讨论】:

    标签: ios serialization encode


    【解决方案1】:

    关闭...

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2020-07-11
      • 2010-12-28
      • 2014-06-23
      • 2012-04-13
      • 2019-04-08
      • 2019-11-30
      相关资源
      最近更新 更多