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;

      }

      

      

  • 相关阅读:
    【提权思路】绕过SecureRDP限制远程连接
    用Win32编写发送消息至Notepad++的程序
    证明自己吧--------Writeup
    【漏洞预警】Intel爆CPU设计问题,导致win和Linux内核重设计(附测试poc)
    在Kali Linux上编译Windows EXP
    apt-get出现无法定位安装包问题解决
    利用Pastezort渗透win7
    利用arpspoof探取账户密码
    Argument 'xxx' is not a function, got undefined,初学Angular的第一个坑
    (转)Http协议经典详解
  • 原文地址:https://www.cnblogs.com/diweinan/p/9718687.html
Copyright © 2011-2022 走看看