利用runtime进行归档和反归档

项目中如果有个一个复杂对象需要进行本地序列化的时候我们势必要写这样的代码:
#define SomeKey1@"somekey1"

#define Somekey2 @"somekey2"

#define Somekey3 @"somekey3"

//归档

- (void)encodeWithCoder:(NSCoder *)aCoder

{

[aCoder encodeObject:self.some forKey:SomeKey1];

[aCoder encodeObject:self.CUSTSTATUS forKey:SomeKey2];

[aCoder encodeObject:self.PICTUREID forKey:SomeKey3];

}

// 解档

- (id)initWithCoder:(NSCoder *)decoder

{

if(self = [super init]) {

self.some1 = [decoder decodeObjectForKey:SomeKey1];

self.some2 = [decoder decodeObjectForKey:SomeKey2];

self.some3 = [decoder decodeObjectForKey:SomeKey3];

}

returnself;

}

当只有三个属性的时候还比较简单,但是如果更多呢,势必需要写重复的代码.不要重复,不要重复自己,千万不要重复自己.所以我打算用runtime运行时获取类的所有属性的这个特性完成归档和反归档.

具体代码如下:

这样就完成复杂对象的序列化.

使用起来也很放便,直接在你的model的.m文件中 写入WHYCodingImplementation这个宏定义

然后下面是测试结果:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、归档的基本概念 之前将数据保存本地,只能是字符串、数组、字典、NSNuber、BOOL等容器类对象对象,不能将...
    空白Null阅读 5,262评论 1 10
  • 27、ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是...
    烟雨平生花飞舞阅读 647评论 0 1
  • 下面是我最近两年学习OC中的一些基础知识,对于学习OC基础知识的人可能有些帮助,拿出来分享一下,还是那句话不喜勿喷...
    小小赵纸农阅读 2,701评论 1 7
  • 一、变量声明 为便于下文讨论,提前创建父类Biology以及子类Person: Biology: @interfa...
    762683ff5d3d阅读 331评论 0 0
  • 我有一台点读机,它的颜色是绿白相间的,它的台面上有许多的功能键,旁边还有一个话筒,还配有一支点读笔。 当我遇到不会...
    桂文凯5542阅读 177评论 0 0