ios - NSCoder : how does the class know which object we pass?

标签 ios serialization encode

已经有一个关于 decoding 的类似问题,但我想尝试总结一下,看看我是否正确理解了整个情况。

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

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

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

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

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

我还想请您进一步解释一下“ encodeRootObject ”函数的用法。引用文献中没有太多内容,我从一些代码示例中看到了这一点。我知道 archiveRootObject 用于实际保存对象,但是什么时候应该使用encodeRootObject?当我尝试对我定义的类的对象进行编码时,是否会使用此方法?

最佳答案

关闭...

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

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

关于ios - NSCoder : how does the class know which object we pass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343240/

相关文章:

ios - PCL 中的 HttpClient 调用在 iOS 中不起作用

ios - 如何填充 iOS 屏幕数据

c# - 将自定义对象的 ArrayList 保存到用户设置

python - 多页抓取期间出现 NoneType 错误

python - 使用 multipart_encode 的问题(海报库)

c# - xamarin 表单应用程序链接 - 从 ios 应用程序委托(delegate)打开 PCL View

ios - 无法实现核心图条形图中条形颜色的更改

java - 在Java中反序列化C#生成的RabbitMQ消息

python - djangorest框架-全局默认模型序列化器

xml - 如何使用 XStream 框架对 UTF-8 进行编码?