美文网首页
runtime 进行归档和解档

runtime 进行归档和解档

作者: 伯wen | 来源:发表于2017-01-12 10:11 被阅读24次

数据本地持久化时, 一般会将模型进行归档, 从本地获取数据时, 需要解档
下面使用runtime的方式进行归档解档, 复制粘贴即可, 就算后期添加和删减属性, 也不需要对这里做任何操作

第一步, 模型遵守协议 <NSCoding>
第二部, 导入runtime头文件 #import <objc/runtime.h>
第三步, 将下面代码复制粘贴到需要本地化的模型.m文件中即可

- (void)encodeWithCoder:(NSCoder *)encoder
{
    unsigned int count = 0;
    //  利用runtime获取实例变量的列表
    Ivar *ivars = class_copyIvarList([self class], &count);
    for (int i = 0; i < count; i ++) {
        //  取出i位置对应的实例变量
        Ivar ivar = ivars[i];
        //  查看实例变量的名字
        const char *name = ivar_getName(ivar);
        //  C语言字符串转化为NSString
        NSString *nameStr = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
        //  利用KVC取出属性对应的值
        id value = [self valueForKey:nameStr];
        //  归档
        [encoder encodeObject:value forKey:nameStr];
    }
    //  记住C语言中copy出来的要进行释放
    free(ivars);

}

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super init]) {
        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 stringWithCString:name encoding:NSUTF8StringEncoding];
            id value = [decoder decodeObjectForKey:key];
            //  设置到成员变量身上
            if (!value) continue;
            [self setValue:value forKey:key];
        }
        free(ivars);
    }
    return self;
}

相关文章

  • runtime 进行归档和解档

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

  • 使用runtime 进行归档和解档

    使用runTime进行归档与解档 //归档 使用编码器将对象编码成二进制流 -(void)encodeWithCo...

  • RunTime中归档和解档

    编译:$clang - rewrite -objc main.m消息发送机制 Person *p = [[Pers...

  • iOS NSKeyedArchiver数据归档

    iOS中利用NSKeyedArchiver和NSKeyedUnarchiver进行数据的归档和解档操作。 归档 所...

  • iOS - runtime-04实现自动解归档

    通过 runtime 进行归档、解档很节省很多工作,我先贴一段常规的解归档的代码。 通过这种方式进行解归档很麻烦,...

  • runtime初体验二(实例)

    废话不多说,分享两个简单的runtime使用场景:1、在存储用户信息的时候使用的归档和解档;2、替换系统方法。归档...

  • 利用Runtime 进行接档归档

    | 首先进行接档归档前, 存储数据需要遵循协议 和引入 #import

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

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

  • 归档和解档

    Animal.m ViewController

  • 归档和解档

    一、归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程。归档是将数据持久化的一种方式...

网友评论

      本文标题:runtime 进行归档和解档

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