复杂对象利用runtime快速归档

首先,归档和反归档的对象需要遵从coding协议
@interface YCBreakDownModel : NSObject<NSCoding>

然后支持归档需要实现方法:
- (void)encodeWithCoder:(NSCoder *)aCoder
反归档需要实现:
- (instancetype)initWithCoder:(NSCoder *)aDecoder

利用runtime, class_copyIvarList函数, 取得ivar指向成员变量的指针,利用ivar_getName函数,取得属性名,利用kvc取得属性值

代码

- (void)encodeWithCoder:(NSCoder *)aCoder {
    unsigned int propertyCount;
    Ivar * ivars = class_copyIvarList([self class], &propertyCount);
    for (int i = 0; i < propertyCount; i ++) {
        Ivar ivar = ivars[i];
        NSString * key = [NSString stringWithUTF8String:ivar_getName(ivar)];
        [aCoder encodeObject:[self valueForKey:key] forKey:key];
    }
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        unsigned int propertyCount;
        Ivar * ivars = class_copyIvarList([self class], &propertyCount);
        for (int i = 0; i < outCount; i ++) {
            Ivar ivar = ivars[i];
            NSString * key = [NSString stringWithUTF8String:ivar_getName(ivar)];
            [self setValue:[aDecoder decodeObjectForKey:key] forKey:key];
        }
    }
    return self;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 引导 对于从事 iOS 开发人员来说,所有的人都会答出「 Runtime 是运行时 」,什么情况下用 Runtim...
    Winny_园球阅读 9,661评论 3 75
  • 把 OC 中基本数据存储到沙盒中,被称为基本数据持久化。 基本数据,在 oc中有以下四种,分别为 NSString...
    flyrees阅读 4,894评论 0 0
  • 什么是runtime? runtime 是 OC底层的一套C语言的API(引入或),编译器最终都会将OC代码转化为...
    Cooper_Chp阅读 4,390评论 0 0
  • OC最实用的runtime总结,面试、工作你看我就足够了! 前言runtime的资料网上有很多了,部分有些晦涩难懂...
    small_Sun阅读 4,421评论 1 12
  • 前言 runtime的资料网上有很多了,部分有些晦涩难懂,我通过自己的学习方法总结一遍,主要讲一些常用的方法功能,...
    YinLei阅读 2,463评论 0 0

友情链接更多精彩内容