利用runtime进行归档/解归档
2016-04-13 10:31
155 查看
当需要对数据进行归档存储时,需要对使用到的所有属性进行归档处理,属性数量少时工作量还是比较轻松的,若是有成百上千的属性,这无非是一个令人头大的问题。这时利用runtime的class_copyIvarList方法对属性进行归档是一个明智之举。
runtime的class_copyIvarList方法可以得到所有属性的拷贝。
进行归档时首先需要重写协议中的两个协议方法
代码如下:
Ivar是c语言的内容,用过后需要手动释放
runtime的class_copyIvarList方法可以得到所有属性的拷贝。
进行归档时首先需要重写协议中的两个协议方法
代码如下:
//归档 - (void)encodeWithCoder:(NSCoder *)aCoder{ unsigned int outCount = 0; Ivar *ivars = class_copyIvarList([self class], &outCount); for (unsigned int i =0; i<outCount; i++) { Ivar ivar = ivars[i]; NSString*key = [NSString stringWithUTF8String:ivar_getName(ivar)]; id value = [self valueForKey:key]; [aCoder encodeObject:value forKey:key]; } free(ivars); } //解归档 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{ self = [super init]; if (self) { unsigned int OutCount = 0; Ivar *ivars = class_copyIvarList([self class], &OutCount); for (unsigned int i =0; i<OutCount; i++) { Ivar ivar = ivars[i]; NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)]; [aDecoder setValue:[aDecoder decodeObjectForKey:key] forKey:key]; } free(ivars); } return self; }
Ivar是c语言的内容,用过后需要手动释放
相关文章推荐
- 解决:remove override annotation问题
- Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型
- Linux 下ftp上传和下载文件
- opencv中替换图片ROI矩形区域的方法
- 安卓MVP
- 升序排列字符数组
- Apache Lucene初探
- swift map filter reduce函数
- Android Studio 运行项目出现Information:Gradle tasks异常解决办法。
- __attribute__ 你知多少?
- leetcode - roman to integer & integer to roman
- iOS自定义弹出框
- IPC(四)_Aidl的基本使用过程
- python小模块---fileinput
- 程序员应该接外包吗?
- MVP架构
- Linux kernel内核架构的理解
- phpstudy 安装memcached服务和memcache扩展
- 【Android Studio错误】 If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle.
- 关于AppStore上线遇到900034证书问题 !已解决