前言:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使用了runtime就可以动态设置,就会变的很轻松!

首先需要导入<objc/runtime.h>

其次归档解档需要遵循NSCoding协议

核心代码

- (void)encodeWithCoder:(NSCoder *)encoder
{unsigned int count = 0;//1.获取该类所有的成员变量Ivar *ivars = class_copyIvarList([IWMerchantBasicInfo class], &count);for (int i = 0; i < count; i ++) {Ivar ivar = ivars[i];//2.查看成员变量const char *name = ivar_getName(ivar);//3.根据key获取到对应的valueNSString *key = [NSString stringWithUTF8String:name];id value = [self valueForKey:key];//4.归档[encoder encodeObject:value forKey:key];}//5.释放free(ivars);
}- (instancetype)initWithCoder:(NSCoder *)decoder
{if (self = [super init]) {unsigned int count = 0;//1.获取该类所有的成员变量Ivar *ivars = class_copyIvarList([IWMerchantBasicInfo class], &count);for (int i = 0 ; i < count; i ++) {Ivar ivar = ivars[i];//2.查看成员变量const char *name = ivar_getName(ivar);//3.根据key获取到对应的valueNSString *key = [NSString stringWithUTF8String:name];id value = [self valueForKey:key];[self setValue:value forKey:key];}//4.释放free(ivars);}return self;
}

示例代码:

.h文件

#import <Foundation/Foundation.h>@interface IWMerchantBasicInfo : NSObject<NSCoding>//商铺编码
@property (copy,nonatomic) NSString *merchant_id;
//商铺名称
@property (copy,nonatomic) NSString *merchant_name;
//商铺Logo
@property (copy,nonatomic) NSString *logo;
//商铺描述
@property (copy,nonatomic) NSString *merchant_des;
//商铺描述图片
@property (copy,nonatomic) NSString *merchant_des_pic;
//商铺描述图片
@property (copy,nonatomic) NSArray *merchant_des_pics;
//联系人
@property (copy,nonatomic) NSString *contact;
//联系手机号码
@property (copy,nonatomic) NSString *contact_phone;
//固定电话号码
@property (copy,nonatomic) NSString *landline_phone;
//营业时间
@property (copy,nonatomic) NSString *business_times;
//广告语
@property (copy,nonatomic) NSString *ad;
//商家分类
@property (copy,nonatomic) NSString *category_id;
//经度
@property (assign,nonatomic) float longitude;
//纬度
@property (assign,nonatomic) float latitude;
//店铺地址
@property (copy,nonatomic) NSString *merchant_address;
//商家活动小图标
@property (copy,nonatomic) NSString *bd_thumbnail;
//商家活动小图标数组
@property (nonatomic,strong) NSArray *bdThumbnails;
//评分
@property (assign,nonatomic) float score;
//是否被收藏
@property (nonatomic,assign) BOOL collected;@end

.m文件

#import "IWMerchantBasicInfo.h"
#import <objc/runtime.h>@implementation IWMerchantBasicInfo- (void)setBd_thumbnail:(NSString *)bd_thumbnail
{_bd_thumbnail = bd_thumbnail;if (_bd_thumbnail.length != 0) {NSMutableArray *array = (NSMutableArray *)[_bd_thumbnail componentsSeparatedByString:@","];for (NSString *arrayStr in array) {if (arrayStr.length == 0 || [arrayStr isEqualToString:@""]) {[array removeObject:arrayStr];}}_bdThumbnails = array;}
}- (void)setMerchant_des_pic:(NSString *)merchant_des_pic
{_merchant_des_pic = merchant_des_pic;if (_merchant_des_pic.length != 0) {NSMutableArray *array = (NSMutableArray *)[_merchant_des_pic componentsSeparatedByString:@","];for (NSString *arrayStr in array) {if (arrayStr.length == 0 || [arrayStr isEqualToString:@""]) {[array removeObject:arrayStr];}}_merchant_des_pics = array;}
}- (void)encodeWithCoder:(NSCoder *)encoder
{unsigned int count = 0;//1.获取该类所有的成员变量Ivar *ivars = class_copyIvarList([IWMerchantBasicInfo class], &count);for (int i = 0; i < count; i ++) {Ivar ivar = ivars[i];//2.查看成员变量const char *name = ivar_getName(ivar);//3.根据key获取到对应的valueNSString *key = [NSString stringWithUTF8String:name];id value = [self valueForKey:key];//4.归档[encoder encodeObject:value forKey:key];}//5.释放free(ivars);
}- (instancetype)initWithCoder:(NSCoder *)decoder
{if (self = [super init]) {unsigned int count = 0;//1.获取该类所有的成员变量Ivar *ivars = class_copyIvarList([IWMerchantBasicInfo class], &count);for (int i = 0 ; i < count; i ++) {Ivar ivar = ivars[i];//2.查看成员变量const char *name = ivar_getName(ivar);//3.根据key获取到对应的valueNSString *key = [NSString stringWithUTF8String:name];id value = [self valueForKey:key];[self setValue:value forKey:key];}//4.释放free(ivars);}return self;
}@end

IOS 利用运行时机制来进行归档解档相关推荐

  1. iOS的runtime运行时机制

    本文转自http://www.cnblogs.com/guoxiao/p/3583432.html 最近一直在研究runtime运行时机制的问题,我想可能也有很多人不太清楚这个问题吧?在这里跟大家沟通 ...

  2. iOS 利用归档解档实现类似微博及一些CRM类软件的草稿箱思路

    实际上就是写一个model类 然后将要存数据放到model中,然后将model添加到数组,然后对数组及数组中放的model归档,本地存储起来,解档,拿到数据在需要的地方显示出来 因为model是一个自 ...

  3. 【iOS数据持久化】归档解档(NSKeyedArchiver/ NSKeyedUnarchiver)

    简介 归档(Archive)也称为序列化(serialization),把对象转化为字节码,以文件的形式存储在磁盘上,只要遵循了NSCoding协议的对象都可以实现归档和解档(大部分foundatio ...

  4. java编译不报错但运行啥都没_java编译时与运行时概念与实例详解

    java编译时与运行时概念与实例详解 发布于 2020-7-29| 复制链接 本篇文章通过实例对 java程序编译时与运行时进行了详解,需要的朋友可以参考下 Java编译时与运行时很重要的概念,但是一 ...

  5. 四种数据持久化方式(上) :属性列表与归档解档

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹. iOS开发中 ...

  6. 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver

    在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...

  7. 使用偏好设置、属性列表、归档解档保存数据、恢复数据

    数据持久化就是将文件保存到硬盘,以便下次运行时可以读取或永久保存.iOS提供了以下几种持久化方案: NSUserDefaults (偏好设置) property list 即Plist (属性列表) ...

  8. runtime自动归档/解档

    原文出自:标哥的技术博客 前言 善用runtime,可以解决自动归档解档.想想以前归档是手动写的,确实太麻烦了.现在有了runtime,我们可以做到自动化了.本篇文章旨在学习如何通过runtime实现 ...

  9. UE 手游在 iOS 平台运行时内存占用太高?试试这样着手优化

    性能优化,对游戏开发来说是一个需要不断钻研的课题,性能越好,游戏才会运行的更加顺畅,玩家的体验感才会更好.腾讯游戏学院专家.游戏客户端开发 Leonn,将和大家分享 UE 手游在 iOS 平台上的内存 ...

最新文章

  1. 方向键 上下左右的转译
  2. bootstrap 源码中部分不了解的css属性
  3. 大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#
  4. 利用innerHTML实现隐显效果-两种实现方法
  5. windows的libcurl下zlib1.dll问题
  6. 【Python系列】之画BD-RATE及码率波动图示例
  7. (一)Quartz2.2.1 简单例子
  8. 替换url中某个参数的值或是添加某个参数的方法(js 分页上下页可以使用)
  9. 剑指 offer set 5 二进制中 1 的个数
  10. c语言随机函数生成字符,c语言随机数生成加减乘除 用C语言编程随机产生一道......
  11. 大数据可视化期末复习
  12. 入侵WIN2003 PHP服务器的另类技术
  13. python实现Instagram网络爬虫
  14. GHOST XP SP2 遐想网络 专用加强版
  15. SS14 SS34如何区分正负极
  16. 线性代数1:向量、线性组合、张成的空间和基
  17. 客户体验是什么?如何提升用户体验从而提高产品成单率?必读!
  18. 云服务器是干什么的 通俗易懂地解释一下
  19. 关于极光推送报错6003的一些问题
  20. 多功能报警杆在高速服务区的应用

热门文章

  1. 我爬取了猪八戒网站的信息,发现了程序员做威客不得不进的坑
  2. first diary
  3. 求平均数(1~10)
  4. doc命令大全(经典收藏)
  5. 客户满意度测评模型-「客户满意度指数模型」
  6. linux 安装bt下载软件,centos6.3安装linux下的BT软件qbittorrent的方法
  7. Win10 打印机共享问题解决实录
  8. 数据分析师常用的 Linux 命令总结
  9. c语言循环中按键跳出,C语言跳出循环
  10. C#梁朝伟变刘德华之山寨实现