美文网首页程序员
iOS干货 - runtime实现模型对象快速归解档

iOS干货 - runtime实现模型对象快速归解档

作者: 一夜暴富两夜也行 | 来源:发表于2018-04-10 10:17 被阅读36次

        项目开发中,需要定义一些模型对象储存用户基本信息或数据。常规做法,我们会遵循归档接档协议,并对每一个属性实现归档解档方法:- (id)initWithCoder:(NSCoder *)decoder 和 - (void)encodeWithCoder:(NSCoder *)encoder .


常规方法解档 常规方法归档

       模型属性随时会增加,常规做法下,我们需要实现每一个属性的归档和接档,开发效率低下。试想想,每次增加一个属性都要去写归档解档方法烦不烦?

模型属性多种多样

        利用runtime,我们可以遍历模型的所有属性,并依次归档和解档。干货如下:

-(id)initWithCoder:(NSCoder *)aDecoder//从coder中读取数据,保存到相应的变量中,即反序列化数据

{

    self = [super init];

    if (self)

    {

        unsigned int iVarCount = 0;

        Ivar *iVarList = class_copyIvarList([self class], &iVarCount);

        for (int i = 0; i < iVarCount; i++) {

            Ivar var = iVarList[i];

            const char *varName = ivar_getName(var);

            NSString *key = [NSString stringWithUTF8String:varName];

            id value = [aDecoder decodeObjectForKey:key];

            [self setValue:value forKey:key];

        }

        free(iVarList);

    }

    return self;

}

-(void)encodeWithCoder:(NSCoder *)aCoder// 读取实例变量,并把这些数据写到coder中去。序列化数据

{

    unsigned int iVarCount = 0;

    Ivar *iVarList = class_copyIvarList([self class], &iVarCount);

    for (int i = 0; i < iVarCount; i++) {

        Ivar var = iVarList[i];

        const char *varName = ivar_getName(var);

        NSString *key = [NSString stringWithUTF8String:varName];

        id value = [self valueForKey:key];

        [aCoderencodeObject:value forKey:key];

    }

    free(iVarList);

}

相关文章

  • iOS干货 - runtime实现模型对象快速归解档

    项目开发中,需要定义一些模型对象储存用户基本信息或数据。常规做法,我们会遵循归档接档协议,并对每一个属性实现归档解...

  • runtime +kvo实现快速归档 解档操作

    先看一个初始版的 ` (void)viewDidLoad {[super viewDidLoad];Person ...

  • iOS-Runtime实现对象的归档/解档

    工作中,Runtime实现对象的归档/解档的功能经常用到。之前没有做整理,今天特意整理了一下,也算作为一个知识点吧...

  • runTime

    iOS runtime讲解,并且用runtime动态归档与解档 (2015-09-30 22:42:02)转载▼ ...

  • 数据持久化-归档、解档

    模型对象实现归档和解档代理方法 解档 宏定义路径 归档 任何地方只要动了数组都要归档

  • ios-Runtime(运行时)

    利用runtime来实现归档解档 方法交换 俗称 OC的方法欺骗 KVO的实现原理 用runtime来实现KVO...

  • 2018-03-12

    ios通过Runtime动态完成数据存储(归档/解档) 实现数据序列化和反序列化,必定实现的两个方法: 当属性比较...

  • runtime使用 自定义数据类型的编码解码

    通过runtime 遍历自定义model的所有属性实现归档解档操作。 要实现我们自定义的model能够自动解档归档...

  • runtime 进行归档和解档

    数据本地持久化时, 一般会将模型进行归档, 从本地获取数据时, 需要解档下面使用runtime的方式进行归档解档,...

  • iOS 解档 value for key 'NS.objects

    苹果在iOS 11之后提供了新的解档方法: 当使用新的解档方法解档嵌套模型时,会报code:4864的错误解档失败...

网友评论

    本文标题:iOS干货 - runtime实现模型对象快速归解档

    本文链接:https://www.haomeiwen.com/subject/uhmayttx.html