Ios 为什么不是';是否有默认的NSCoding实现?
我了解如何使用Ios 为什么不是';是否有默认的NSCoding实现?,ios,nscoding,Ios,Nscoding,我了解如何使用NSCoding将我的对象转换为存档对象。这不是我的问题 我想知道的是为什么没有一个NSCoding的默认实现可以处理99%的情况 例如,每次编写要存档的自定义类时,我都会执行以下操作: 实现-(void)encodeWithCoder:和-(id)initWithCoder: 沿着我的属性列表,为每个属性写一对语句(一个编码,一个解码) 如果属性是一个对象,则使用encode/decodeObject方法 如果属性是一个值,则使用相应的编码/解码方法 我总是使用属性的名称作为密
NSCoding
将我的对象转换为存档对象。这不是我的问题
我想知道的是为什么没有一个NSCoding
的默认实现可以处理99%的情况
例如,每次编写要存档的自定义类时,我都会执行以下操作:
-(void)encodeWithCoder:
和-(id)initWithCoder:
- 如果属性是一个对象,则使用encode/decodeObject方法
- 如果属性是一个值,则使用相应的编码/解码方法
- 我总是使用属性的名称作为密钥
NSCoding
的实现都与我的完全一样,唯一的变化是需要操作的特定属性
在我看来,这将是一个标准实现的完美场所,如果您的特定情况很糟糕,可以选择覆盖
我对发生的事情有误解吗?如果没有,我是否可以在
NSObject
上添加一个类别,以便在我的项目中的所有对象上实现此通用方法?我怀疑您问题的答案只是,NSCoding是在Objective-C属性存在之前很久设计的。(NSCoding是1994年的一部分,而属性是在2007年到达的。)此外,有些类的属性不适合以后序列化
但是,您提出的解决方案可以节省大量时间!至少已经存在一个这样的解决方案。查看。关于“许多类都有属性…”,我同意。尽管我怀疑“很多”实际上更像“很少”。至少,在实现NSCoding时,我很少从我正在存档的类中排除任何属性!如果NSCoding和Objective-c2.0是同时设计的,那么“no archive”可能是属性配置标志之一(如非原子、赋值等)!幸运的是,自动编码提供了几种简单的方法来跳过对某个属性的存档。现在就来看看吧。谢谢你的链接!