为什么没有NSCoding的默认实现?

时间:2014-05-17 15:16:21

标签: ios nscoding

我了解如何使用NSCoding将对象转换为归档对象。那不是我的问题。

我想知道为什么没有NSCoding的默认实现可以处理99%的案例。

例如,每次我编写一个我想要存档的自定义类时,都会执行以下操作:

  1. 实施-(void)encodeWithCoder:-(id)initWithCoder:
  2. 沿着我的属性列表,为每个属性写一对语句(一个编码,一个解码)。
    • 如果属性是对象,我使用encode / decodeObject方法。
    • 如果属性是值,我使用相应的编码/解码方法。
    • 我总是使用该属性的名称作为我的密钥。

    我怀疑几乎NSCoding的每一个实现都与我的完全一样,唯一的变化是需要操作的特定属性。

    在我看来,这对于标准实施来说是一个完美的地方,如果你的特殊情况如果时髦,可以选择覆盖它。

    我对发生的事情有误解吗?如果没有,我可以在NSObject上添加一个类别,以便在我的项目中的所有对象上实现这个常用方法吗?

1 个答案:

答案 0 :(得分:3)

我怀疑你的问题的答案很简单,NSCoding的设计早在Objective-C属性存在之前。 (NSCoding是1994年OpenStep spec的一部分,而属性在2007年以Objective-C 2.0到达。)此外,某些类的属性不适合以后序列化。

但是,您提出的解决方案可以节省大量时间!至少存在一种这样的解决方案。查看AutoCoding