美文网首页
Model 数据解析

Model 数据解析

作者: helinyu | 来源:发表于2021-12-08 18:41 被阅读0次

    YYModel

    YYModel 几个方法结构

    YYModel 里面使用的技术
    1、runtime 获取model的属性、变量、方法 ,
    2、同事对metaClass进行了缓存, metaCache 和classCache ,缓存提高了效率
    3、实现来了model - json - model archive
    4、使用了CoreFoundation里面的方法, 算是提高了效率
    5、KVC设置有关的值

    YYModel 解析参考


    JsonModel

    JsonModel 通过runtime获取属性以及数目
    1、初始化的时候获取有关的属性, 获取的内容缓存到class里面,runtime进行绑定model的值,相当于缓存,这个是没有问题的。 不过这个过程使用了scanner来处理属性。
    2、-(BOOL)__doesDictionary:(NSDictionary*)dict matchModelWithKeyMapper:(JSONKeyMapper*)keyMapper error:(NSError**)err 这个方法检测是否符合, 即为哪些属性的值必须要有的,这个感觉没有必要 , 这里也使用了for来进行了校验
    3、 if (![self __importDictionary:dict withKeyMapper:self.__keyMapper validation:YES error:err])主要的处理数据的方法;
    《1》 这里处理keyPath,使用了try...cache(慢) , for循环是否是校验的类型(慢)、
    4、 通过protocol来进行处理这个接口的内容


    MJExtension

    获取有关的信息,然后进行遍历这个内容, 完成的遍历过程。


    PS:
    1: 所以JSONModel相比YYModel, 浪费太多时间带for以及try...catch 里面了。
    2: JsonModel 获取属性进行了检查(耗时),并且有一个optional这个属性检查。
    3:处理子的类型,都是使用了递归,这个没啥好说的。

    YYModel和jsonModel的对比,其实就死kvc和scanner的计算差别, 也是常规遍历算法和hash遍历设置算法的优劣问题了。

    YYModel 为什么比其他的模型块?
    1> runtime 解析信息,开始解析足够的信息 ,
    2> 缓存, metaCache 、classCache
    3> coreFoundation 库,提高了性能
    4>一个判断,属性和数据的数目,然后进行判断,就少了全部的遍历
    5> switch 替换if...else 库 ,稍微高一丢丢。

    PS: 考虑一个问题, 属性的一些控制变量怎么处理? eg: readonly 。。。

    YYModel又是参考

    相关文章

      网友评论

          本文标题:Model 数据解析

          本文链接:https://www.haomeiwen.com/subject/cnozxrtx.html