runtime序列化&反序列化
来源:互联网 发布:苹果手机进水数据恢复 编辑:程序博客网 时间:2024/05/17 06:12
//引入头文件#import <objc/message.h>
/* 实现步骤 - 动态获取成员变量 - 便利所有成员变量 - 动态获取成员变量名称作为key - 利用KVC获取或者设置value - 归档 - 释放 */
//告诉系统,归档哪些属性- (void)encodeWithCoder:(NSCoder *)coder{ //利用runtime 来归档!! unsigned int count = 0; //count 需要改变所以传入&count c的常识 //ivars 类似数组 不会越界 Ivar * ivars = class_copyIvarList([self class], &count); for (int i = 0; i < count; i++) { //获取属性名作为key Ivar ivar = ivars[i]; const char * name = ivar_getName(ivar); NSString * key = [NSString stringWithUTF8String:name]; //获取value id value = [self valueForKey:key]; //存入归档文件 [coder encodeObject:value forKey:key]; } //C语言里面!! 一旦遇到了copy creat new 需要释放 free(ivars);}
//解档- (instancetype)initWithCoder:(NSCoder *)coder{ self = [super init]; if (self) { unsigned int count = 0; Ivar * ivars = class_copyIvarList([self class], &count); for (int i = 0; i < count; i++) { Ivar ivar = ivars[i]; const char * name = ivar_getName(ivar); NSString *key = [NSString stringWithUTF8String:name]; //解档 id value = [coder decodeObjectForKey:key]; //通过KVC 设置 [self setValue:value forKey:key]; } free(ivars); } return self;}
阅读全文
0 0
- runtime序列化&反序列化
- iOS 序列化与反序列化(runtime) 01
- iOS 序列化与反序列化(runtime) 02
- 序列化反序列化
- 序列化 反序列化
- 序列化反序列化
- 序列化反序列化
- 序列化、反序列化
- 序列化、反序列化
- 序列化/反序列化
- 序列化/反序列化
- 序列化反序列化
- 序列化,反序列化
- 序列化,反序列化
- 序列和反序列化
- 万能序列,反序列化
- 序列和反序列化
- 序列化与反序列
- [动态规划] 特别的教程
- Android(II)Androidstudio 一直卡在Building "xxx" gradle project info的解决办法
- 【NOIP2017提高A组冲刺11.6】总结
- 深搜 newoj 2015邮票
- LibreOJ NOIP Round #1
- runtime序列化&反序列化
- 多态
- Java中一些比较常见的加密算法
- ubuntu下pycharm闪退
- 第九周 项目1
- HTTP Status 400
- EasyPlayer RTSP播放器对RTSP播放地址url的通用兼容修改意见
- Python(9)萌新也能看的懂——如何用openpyxl处理excel
- AWK的初级运用之分组计算功能