美文网首页
Mantle、JSONModel、MJExtension、YYM

Mantle、JSONModel、MJExtension、YYM

作者: 丘山Ivan | 来源:发表于2017-11-17 13:34 被阅读512次

    Mantle

    • 可定制性高、功能丰富,文档完善,使用广泛

    • 要求所有模型类必须继承自MTModel基类.

    • 使用了KVC的方法来验证要赋的值的类型是否和key的类型是否匹配.

    • 如果服务器数据和代码中定义的值类型不相同,不做处理会Carsh。所以基本每个字段都需要做判断处理。

    • 需要在.m文件中将JSON字典里的键对应的值,赋值给属性.赋值的时候可以直接使用独有的'.',可以减少使用objectForKey。

      // 伪代码
      + (NSDictionary *)JSONKeyPathsByPropertyKey { 
      return @{ 
      //将JSON字典里dt键对应的值,赋值给date属性
      @"date": @"dt",  
      //这个点‘.’是什么意思呢,表示将main键对应的子字典里,
      //temp键对应的值赋给temperature属性。
      //我们不用再写 objectForKey]objectForKey]..这种代码了。 
      //注意了:当main键对应的是数组时,main.temp返回的 
      //为所有temp键对应值的数组合集 
      @"height": @"main.height" 
       };
      }
      
    • Json->Model

      • modelOfClass:fromJSONDictionary:error该方法会调用key-key map方法。Mantle不会自动转类型,如:String->Int, 一旦类型不匹配,直接crash.
      • modelWithDictionary:error:简单的使用KVC进行赋值。不会调用key-key map方法, 要求属性和JSON字典中的key名称相同,否则就crash
    • Model -> JSON

      • JSONDictionaryFromModel:error:一旦有属性为nil, Mantle会转换成NSNull对象放到JSON字典中,这里有一个坑,使用NSUserDefault存储这样的JSON字典时,程序crash,原因是不可以包含NSNull对象。

    JSONModel

    • 简洁的接口
    • 要求所有模型类必须继承自JSONModel基类
    • 服务端数字,客户端NSString,或服务器端字符,客户端NSNumber,这样比较简单的转换
    • 如果代码定义的是基本数据类型,而服务端返回了数组。这时候需要写一个转换方法,如果没有写,JSONModel会抛出一个异常。
    • 当服务器传字符,客户端为NSUInteger类型时,Mantle,JSONModel都会崩溃
    • 归档的方式:它不是将对象归档,而是转换成字典再归档

    MJExtension

    • 不需要你的模型类继承任何特殊基类,毫无污染,毫无侵入性
    • 是一套字典和模型之间互相转换的超轻量级框架
    • 字典(JSON)-->模型(Model)-->字典(JSON)
    • 字典数组(JSON Array)-->模型数组(Model Array)-->字典数组(JSON Array)
    • 类型不匹配那么对应的属性将被赋值为nil.
    • 当服务器传字符,客户端为NSUInteger类型时,不会崩溃
    • 可以直接使用对象归档
    • 有自定义属性转换方式的,可以让开发者自定义类型检测、值过滤来保护App的Crash

    YYModel

    • 不支持自定义属性转换方式的
    • 高性能:转换效率接近手写代码。
    • 自动类型转换:对象类型能自动转换。
    • 类型安全:在转换过程中所有的类型都会被验证,以确保类型安全。
    • 非侵入性:不需要让模型类继承自基类。
    • 轻量级:整个库只包含5个文件。
    • 文档和测试覆盖:100%文档覆盖,99.6代码覆盖。


      image

    转换速率:
    YYModel>MJExtension>JSONModel>Mantle
    防崩溃能力比较
    YYModel>MJExtension>JSONModel>Mantle

    参考:
    iOS JSON 模型转换库评测

    相关文章

      网友评论

          本文标题:Mantle、JSONModel、MJExtension、YYM

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