Dou*_*kem 12 iphone reflection serialization objective-c objective-c-runtime
Objective-C中是否存在任何反射方法,允许您通过检查对象的公共属性并生成encodeWithCoder:和initWithCoder的通用实现来编写通用NSCoding实现:.
我正在考虑像XStream for Java这样的东西,它允许使用反射对Java对象进行序列化和反序列化的通用方法.更好的方法可能是将属性标记为您想要序列化的东西或者是瞬态的(比如Java中的transient关键字).
我一直在阅读有关Cocoa的Archives and Serializations Programming Guide的文档.我知道您希望对对象的序列化进行一些控制,但它通常是一个对称的过程,并且必须反转为序列化编码的内容以反序列化它似乎很奇怪.我是DRY的信徒(不要重复自己).
BJ *_*mer 12
这不仅是可能的,而且我还有一位朋友正在努力做到这一点.(您可以在此处查看他的博客.)使用Objective-C 2.0运行时参考中记录的Objective-C运行时函数完成反射.看一看.
但请注意,只有在需要保存所有实例变量的一般行为时,这才有效.但是,您可能不希望NSView保存其超级视图; 在这种情况下,通用案例不起作用.
你可以想象通过声明要保存的任何实例变量的属性并将任何其他变量"隐藏"来区分事物 - 序列化和事物 - 不是序列化,但这会将属性的整个目的扭曲为一个小的好处.我不推荐它.
(我是BJ Homer评论中链接的博客文章的作者).使用代码有几点需要注意:
我写这个主要是作为一个概念证明,并且有很多例子,这个代码会失败.例如,在对象A中有一个用于B的ivar,而B有一个用于A的ivar,那么使用代码序列化一个或另一个(我相信)会导致无限循环.
尽管如此,我认为Objective-C甚至允许你像第一个那样做一些东西真是太棒了.
归档时间: |
|
查看次数: |
4226 次 |
最近记录: |