【问题标题】:Why isn't there a default implementation of NSCoding?为什么没有 NSCoding 的默认实现?
【发布时间】:2014-05-17 15:16:21
【问题描述】:

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

我想知道为什么没有可以处理大约 99% 的情况的 NSCoding 的默认实现。

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

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

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

在我看来,这将是标准实现的理想场所,如果您的特殊情况很时髦,可以选择覆盖。

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

【问题讨论】:

    标签: ios nscoding


    【解决方案1】:

    我怀疑您的问题的答案只是 NSCoding 早在 Objective-C 属性存在之前就已经设计好了。 (NSCoding 在 1994 年是 OpenStep spec 的一部分,而属性在 2007 年与 Objective-C 2.0 一起出现。)此外,某些类的属性不适合以后序列化。

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

    【讨论】:

    • 关于“许多类都有属性......”,我同意。尽管我怀疑“很多”实际上更像是“少数”。至少,在实现 NSCoding 时,我很少从正在归档的类中排除任何属性。
    • 可能!如果同时设计了 NSCoding 和 Objective-C 2.0,也许“no-archive”可能是属性配置标志之一(如 nonatomic、assign 等)!
    • 幸运的是,自动编码提供了几种简单的方法来跳过归档某个属性。
    • 现在正在调查。感谢您的链接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    相关资源
    最近更新 更多