zoukankan      html  css  js  c++  java
  • iOS runtime归档解档

    1. 为什么要用runtime来归档解档?

      当一个类有几十个属性需要归档, 你总不能一个一个手敲吧, 估计能累死你!!!! runtime归档主要还是使用了获取类的成员列表的方法

    2. 有什么好处?

      节省时间啊, 真爱生命啊大兄弟!

    3. 甩干货

      友情提示: 类要遵从NSCoding协议就

      // 协议方法

      - (void)encodeWithCoder:(NSCoder *)encoder {

        // 获取对象个数

        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 = [self valueForKey:key];

          [encoder encodeObject:value forKey:key];

        }

        // 释放掉指针

        free(ivars);

      }

      

      - (id)initWithCoder:(NSCoder *)decoder {

        if (self = [super init]) {

          unsigned int count = 0;

          Ivar *ivars = class_copyIvarList([Movie class], &count);

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

            // 取出i位置对应的成员变量

            Ivar ivar = ivars[i];  

            // 查看成员变量

            const char *name = ivar_getName(ivar);

            // 解档

            NSString *key = [NSString stringWithUTF8String:name];

            id value = [decoder decodeObjectForKey:key];

            // 设置到成员变量身上

            [self setValue:value forKey:key];        

          }      

          free(ivars);

        }

        return self;

      }

      

      

  • 相关阅读:
    HUSTOJ搭建后为了方便作为Judger调用进行的一些修改操作
    [转]我国古代求解最大公约数的方法-更相减损术
    [转]nodejs导出word
    Java抓取Codeforces——针对某一次提交的源码和数据
    Java以UTF-8格式读写及追加写文件示例
    C++使用fill初始化二维数组
    FNV hash算法
    vitess基础镜像构建流程Centos
    go 工具链目前[不支持编译 windows 下的动态链接库]解决方案
    binlog分析方法
  • 原文地址:https://www.cnblogs.com/diweinan/p/9718687.html
Copyright © 2011-2022 走看看