Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么不是';是否有默认的NSCoding实现?_Ios_Nscoding - Fatal编程技术网

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”可能是属性配置标志之一(如非原子、赋值等)!幸运的是,自动编码提供了几种简单的方法来跳过对某个属性的存档。现在就来看看吧。谢谢你的链接!