IOS 利用运行时机制来进行归档解档
前言:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使用了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 利用运行时机制来进行归档解档相关推荐
- iOS的runtime运行时机制
本文转自http://www.cnblogs.com/guoxiao/p/3583432.html 最近一直在研究runtime运行时机制的问题,我想可能也有很多人不太清楚这个问题吧?在这里跟大家沟通 ...
- iOS 利用归档解档实现类似微博及一些CRM类软件的草稿箱思路
实际上就是写一个model类 然后将要存数据放到model中,然后将model添加到数组,然后对数组及数组中放的model归档,本地存储起来,解档,拿到数据在需要的地方显示出来 因为model是一个自 ...
- 【iOS数据持久化】归档解档(NSKeyedArchiver/ NSKeyedUnarchiver)
简介 归档(Archive)也称为序列化(serialization),把对象转化为字节码,以文件的形式存储在磁盘上,只要遵循了NSCoding协议的对象都可以实现归档和解档(大部分foundatio ...
- java编译不报错但运行啥都没_java编译时与运行时概念与实例详解
java编译时与运行时概念与实例详解 发布于 2020-7-29| 复制链接 本篇文章通过实例对 java程序编译时与运行时进行了详解,需要的朋友可以参考下 Java编译时与运行时很重要的概念,但是一 ...
- 四种数据持久化方式(上) :属性列表与归档解档
iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹. iOS开发中 ...
- 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...
- 使用偏好设置、属性列表、归档解档保存数据、恢复数据
数据持久化就是将文件保存到硬盘,以便下次运行时可以读取或永久保存.iOS提供了以下几种持久化方案: NSUserDefaults (偏好设置) property list 即Plist (属性列表) ...
- runtime自动归档/解档
原文出自:标哥的技术博客 前言 善用runtime,可以解决自动归档解档.想想以前归档是手动写的,确实太麻烦了.现在有了runtime,我们可以做到自动化了.本篇文章旨在学习如何通过runtime实现 ...
- UE 手游在 iOS 平台运行时内存占用太高?试试这样着手优化
性能优化,对游戏开发来说是一个需要不断钻研的课题,性能越好,游戏才会运行的更加顺畅,玩家的体验感才会更好.腾讯游戏学院专家.游戏客户端开发 Leonn,将和大家分享 UE 手游在 iOS 平台上的内存 ...
最新文章
- 方向键 上下左右的转译
- bootstrap 源码中部分不了解的css属性
- 大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#
- 利用innerHTML实现隐显效果-两种实现方法
- windows的libcurl下zlib1.dll问题
- 【Python系列】之画BD-RATE及码率波动图示例
- (一)Quartz2.2.1 简单例子
- 替换url中某个参数的值或是添加某个参数的方法(js 分页上下页可以使用)
- 剑指 offer set 5 二进制中 1 的个数
- c语言随机函数生成字符,c语言随机数生成加减乘除 用C语言编程随机产生一道......
- 大数据可视化期末复习
- 入侵WIN2003 PHP服务器的另类技术
- python实现Instagram网络爬虫
- GHOST XP SP2 遐想网络 专用加强版
- SS14 SS34如何区分正负极
- 线性代数1:向量、线性组合、张成的空间和基
- 客户体验是什么?如何提升用户体验从而提高产品成单率?必读!
- 云服务器是干什么的 通俗易懂地解释一下
- 关于极光推送报错6003的一些问题
- 多功能报警杆在高速服务区的应用