如何自动实现属性和ivars的NSCoding

时间:2015-02-19 17:22:14

标签: ios objective-c iphone xcode nscoding

我正在尝试将大量对象保存到文件中并检索它们以供以后使用。

以前,我使用these macros - 但感觉很乏味。

然后我发现Autocoding,它以自己的方式很棒,但它不能编码/解码实例变量。

我需要自动化整个编码/解码过程,因为我的应用程序仍处于开发阶段,为每个ivar编写编码/解码实现都很繁琐。

2 个答案:

答案 0 :(得分:5)

您可以覆盖+ codable Properties方法并返回ivars的名称。它不如自动检测它们好,但比手动编写NSCoding逻辑更好。

答案 1 :(得分:1)

您可以从Objective-C运行时获取与类关联的ivars列表 - 请参阅class_copyIvarList函数。同样,您可以使用object_getIvar获取特定对象的ivar值,并将其设置为object_setIvar。这些似乎是您自动编码对象的ivars所需的主要工具。

您需要注意的一个地方是,您不希望同时保存属性的值和支持它的ivar的值。因此,您可能希望将ivars列表与属性列表进行比较,并且只对那些似乎没有相应属性的ivars进行编码/解码。

此外,并不总是希望使对象的状态的每个最后一位都持久,因此您应该考虑提供一种选择退出特定ivars的方法(最终可能与选择一样乏味)。同样,您可能需要确定甚至可以编码的ivars,例如通常的值类型和自己实现NSCoding的任何类型。