如何自动实现 Properties 和 ivars 的 NSCoding
How to implement NSCoding for Properties and ivars automatically
我正在尝试将大量对象保存到文件中并检索它们供以后使用。
以前,我使用 these macros - 虽然感觉很乏味。
然后我发现了 Autocoding,它以自己的方式很棒,但它不能 encode/decode 实例变量。
我需要自动化 encoding/decoding 的整个过程,因为我的应用程序仍在开发中,并且为每个 ivar 编写 encode/decode 实现是乏味的。
您可以从 Objective-C 运行时获取与 class 关联的 ivar 列表——参见 class_copyIvarList function. Likewise, you can get the value of an ivar for a specific object using object_getIvar and set it with object_setIvar。这些似乎是您自动编码对象的 ivars 所需的主要工具。
您需要注意的一个地方是您不想同时保存 属性 的值和支持它的 ivar 的值。因此,您可能希望将 ivar 列表与属性列表进行比较,并且仅 encode/decode 那些似乎没有对应 属性.
的 ivar
此外,使对象状态的最后一点都持久化并不总是可取的,因此您应该考虑提供一种方法来选择退出特定的 ivar(这最终可能与选择加入一样乏味)。同样,您可能需要确定您甚至 可以 编码哪些 ivar,例如通常的值类型和任何本身实现 NSCoding 的类型。
您可以覆盖 +codableProperties 方法和 return ivar 的名称。它不如自动检测它们好,但比手动编写 NSCoding 逻辑好。
我正在尝试将大量对象保存到文件中并检索它们供以后使用。
以前,我使用 these macros - 虽然感觉很乏味。
然后我发现了 Autocoding,它以自己的方式很棒,但它不能 encode/decode 实例变量。
我需要自动化 encoding/decoding 的整个过程,因为我的应用程序仍在开发中,并且为每个 ivar 编写 encode/decode 实现是乏味的。
您可以从 Objective-C 运行时获取与 class 关联的 ivar 列表——参见 class_copyIvarList function. Likewise, you can get the value of an ivar for a specific object using object_getIvar and set it with object_setIvar。这些似乎是您自动编码对象的 ivars 所需的主要工具。
您需要注意的一个地方是您不想同时保存 属性 的值和支持它的 ivar 的值。因此,您可能希望将 ivar 列表与属性列表进行比较,并且仅 encode/decode 那些似乎没有对应 属性.
的 ivar此外,使对象状态的最后一点都持久化并不总是可取的,因此您应该考虑提供一种方法来选择退出特定的 ivar(这最终可能与选择加入一样乏味)。同样,您可能需要确定您甚至 可以 编码哪些 ivar,例如通常的值类型和任何本身实现 NSCoding 的类型。
您可以覆盖 +codableProperties 方法和 return ivar 的名称。它不如自动检测它们好,但比手动编写 NSCoding 逻辑好。