通过runtime,不管模型有多少属性,通过几句代码就能完成。

假设person类有N多个属性而是(这里随便写3个)

.h

#import <Foundation/Foundation.h>

@interface Person : NSObject <NSCoding>

@property (nonatomic, assign) int age;

@property (nonatomic, assign) int height;

@property (nonatomic, copy) NSString *name;

@end

.m

#import "Person.h"

#import <objc/runtime.h>

#import <objc/message.h>

@implementation MJPerson

- (void)encodeWithCoder:(NSCoder *)encoder

{

unsigned int count = 0;

Ivar *ivars = class_copyIvarList([Person class], &count);

for (int i = 0; i<count; i++) {

// 取出i位置对应的成员变量

Ivar ivar = ivars[i];

// 查看成员变量

const char *name = ivar_getName(ivar);

// 归档

NSString *key = [NSString stringWithUTF8String:name];

id value = [self valueForKey:key];

[encoder encodeObject:value forKey:key];

}

free(ivars);

}

- (id)initWithCoder:(NSCoder *)decoder

{

if (self = [super init]) {

unsigned int count = 0;

Ivar *ivars = class_copyIvarList([Person class], &count);

for (int i = 0; i<count; i++) {

// 取出i位置对应的成员变量

Ivar ivar = ivars[i];

// 查看成员变量

const char *name = ivar_getName(ivar);

// 归档

NSString *key = [NSString stringWithUTF8String:name];

id value = [decoder decodeObjectForKey:key];

// 设置到成员变量身上

[self setValue:value forKey:key];

}

free(ivars);

}

return self;

}

@end

这样写完后,不管属性的多少,runtime都能够完成模型属性的归档与解档,是不是很方便呢。

当然,还可以把.h和.m里面的代码抽成宏,这样以后想要实现复杂对象的存储只需要写两行代码就能搞定。

最新文章

  1. [LeetCode] Merge Sorted Array
  2. Unity Tidy Tile Pack #1
  3. 移动,企业社交(sharepoint2013)--jindahao(金大昊)
  4. Java线程(一):线程安全与不安全
  5. 一招解决OpenERP8.0安装旧版模块报错
  6. NBUT 1120 Reimu&#39;s Teleport (线段树)
  7. C++模板实例掌握
  8. PHP学习笔记 - 进阶篇(5)
  9. Ruby准备工作
  10. 电脑突然死机,系统日志记录事件ID=6008
  11. 第二篇:python高级之装饰器
  12. DecimalFormat用法
  13. Android适配器Adapter学习
  14. P1145 约瑟夫 W(模拟)
  15. Spring Cloud Netflix Eureka源码导读与原理分析
  16. spring boot(十三)小技巧
  17. RabbitMQ高级指南:从配置、使用到高可用集群搭建
  18. js取当前页面名称
  19. zookeeper 典型应用
  20. PHP - MongoDB连接攻略

热门文章

  1. vue事件获取当前对象
  2. C++ 利用template给函数中的变量赋初值
  3. Spring整合Mybatis(IDEA版)
  4. 事业单位招聘网搭建思路和seo方法
  5. Cocos Creator实现1024游戏,免费提供代码。
  6. .htaccess文件上传利用
  7. MyBatis 示例-传递多个参数
  8. 解决IDEA下SpringBoot启动没有Run Dashboard并找回
  9. 《TypeScript入门教程》笔记
  10. 数组转换成List集合