zoukankan      html  css  js  c++  java
  • MJExtention

    这是一个把字典转换成为对象的库,按照作者的意思,它的效率是其他解决方案的数倍,那么,今天让我们来学习一下他是怎么来实现的

    类的解析

    MJFoundation

    这个类来判断传入类型是否可以被解析,也就是说是否来自 NSFoundation

    MJType

    是一种类型封装,每种Type都是唯一的存在,保存在字典中

    MJIvar

    是一个属性的封装,利用Ivar进行初始化,然后通过下面的方法存取和调用

    MJIvar *ivarObject = objc_getAssociatedObject(self, ivar);
        if (ivarObject == nil) {
            ivarObject = [[self alloc] initWithIvar:ivar];
            objc_setAssociatedObject(self, ivar, ivarObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        }
    

    这个类的功能就是通过Ivar获取一些信息

    NSString *name = @(ivar_getName(ivar));
    NSString *code = @(ivar_getTypeEncoding(ivar));
    

    经过初试化之后,MJIvar就拥有了自己的属性名,这样就可以给把它作为KEY,再把传进来的字典进行设置或者提取属性

    NSObject+MJIvar

    这里面的方法是遍历当前类的属性,或者直接遍历父类的属性,然后通过block回调

    NSObject+MJCoding

    这里面实现了遍历的编码和解码,使用NSObject+MJIvar中的方法会把所有属性都回调回来,我们就可以通过MJLvar来直接编码或者解码

    NSObject+MJKeyValue

    首先这个类中定义了一些列协议,用作字典与对象的key不相同时候的转化,还有完成转换之后调用的代理
    然后就是一些转化方法,具体的转化方法就是先讲一切转化成字典,然后遍历类中的所有属性,然后再依次从字典中取出值,然后赋值

    总结

    这个类库究竟帮我们做了什么呢,其实就是把我们平时需要手动的一个一个取得值,赋的值,通过运行时获取到这个类中的所有属性,然后帮我们依次去赋值

  • 相关阅读:
    iscsi序列一、搭建iscsi存储系统
    LVS系列三、LVS集群-IP-TUN模式
    LVS系列二、LVS集群-DR模式
    LVS系列一、LVS集群-NAT模式
    LINUX 的网站压力测试工具 webbench
    关于 /proc/sys/net/ipv4/下 文件的详细解释
    CentOS7+rsync+sersync实现数据实时同步
    Linux Shell 自动备份脚本
    Vim的强大配置文件
    nginx出现403 Forbidden解决方法
  • 原文地址:https://www.cnblogs.com/Jenaral/p/5148178.html
Copyright © 2011-2022 走看看