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;

  }

  

  

猜你喜欢

转载自www.cnblogs.com/diweinan/p/9718687.html