• 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不相同时候的转化,还有完成转换之后调用的代理
    然后就是一些转化方法,具体的转化方法就是先讲一切转化成字典,然后遍历类中的所有属性,然后再依次从字典中取出值,然后赋值

    总结

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

  • 相关阅读:
    IE版本
    我的班级首页,九九计四
    三层体系结构的ASP应用程序
    寻实习有悟
    servlet中请求转发(forword)与重定向(sendredirect)的区别
    Android之Providing Resources(提供资源)
    PHP用SAX解析XML
    Android之Handling Runtime Changes(处理运行时更改)
    Android 之Accessing Resource(资源调用)
    实习第一天
  • 原文地址:https://www.cnblogs.com/Jenaral/p/5148178.html
Copyright © 2020-2023  润新知