美文网首页
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