简单学习 YYModel

作者: 阿瑟李 | 来源:发表于2016-06-12 16:39 被阅读301次

YYModel

简单一看 YY 的代码规模就是和其他库没有办法相比的, 只有两个文件
其中把一个类的信息拆分为下面这几种类

  • YYClassInfo
  • YYClassIvarInfo
  • YYClassMethodInfo
  • YYClassPropertyInfo

还有两个私有的类, 用来解析用户设定的自定义模型, 通过这两个类的分析, 来快速的得知如何去进行转化

  • _YYModelPropertyMeta
  • _YYModelMeta
简单说一下解析流程

1 获取要解析为的对象的 CLASS, 并生成实例
2 调用这个对象的 yy_modelSetWithDictionary 方法
2.1 这个方法会在转化前后判断是否需要执行 modelCustomWillTransformFromDictionary 和 modelCustomTransformFromDictionary 方法
2.2 使用 CFDictionaryApplyFunction 等一系列 CF 赋值

转化回来的流程是这样的

1 所有的方法最后都会调用到一个 ModelToJSONObjectRecursive 的函数上
1.1 这个函数做的事情基本就是判断类型 然后递归转化, 最后传出来一个只有基本类型的对象
1.2 其中如果是自定义的类 那么仍然需要 获取 _YYModelMeta 然后进行转化
1.3 如果用户提供了 modelCustomTransformToDictionary 方法, 那么根据用户自己的方法来再进行一次额外的转化
2 转化完之后再根据各自不同的需求转化为相应的类型

复制, equal, hash 等的判断逻辑
  • hash 是获取 _YYModelMeta 和 每一个 _YYModelPropertyMeta 然后 ^= 每一个属性的 hash 值
  • equal 的的判断优先级是 指针 类型 哈希 最后才是值得判断
  • copy 是获取 所有 _YYModelPropertyMeta 然后判断类型 之后进行复制
系列化 反序列化

简单来说就是 通过 _YYModelPropertyMeta 然后判断类型, 之后再进行序列化和反序列化

一些值得学习的细节

  • YYClassInfo 中利用单例维护了 一个 chache, 并且使用信号量来保证安全
  • 所有内部非继承非初始化的私有方法都是以 '_' 开头的, 虽然不一定一定好, 但是在某种程度上也让代码更加清晰
  • 使用 fine force_inline __inline__ __attribute__((always_inline)) 定义内联函数
  • 使用 -> 的方式取值, 更加清晰
  • 使用 CF 的方法 和 单利缓存 来提升速度

相关文章

  • 简单学习 YYModel

    YYModel 简单一看 YY 的代码规模就是和其他库没有办法相比的, 只有两个文件其中把一个类的信息拆分为下面这...

  • YYModel 学习笔记

    参考YYModel 学习笔记(一) 一.NSObject+YYModel.h NS_ASSUME_NONNULL_...

  • YYModel简单使用

    之前一直没用第三方的model, 太懒懒得学,嘿嘿。最近新项目下定决心使用一个,发现确实挺好用。省去了很多不必要的...

  • 学习YYmodel

    以为看了次彦祖的直播,就能自己也手撸一个json转model的库,看了yy大神的代码,快看哭了,看到后面脑子里面完...

  • 学习YYmodel

    一.调用方法 YYGHUser *model = [YYGHUser yy_modelWithJSON:json]...

  • YYModel 学习

    如何集成? 支持CocoaPods,在 Podfile 中添加 pod 'YYModel'。 支持Carthage...

  • YYModel 2019-06-24

    前言同项目中同事使用YYModel,比原生的要简单高效许多!!!YYModel是YYKit的高效组件之一,在实际场...

  • 关于YYModel 的学习

    ① YYModel GitHub 地址 简单的json/dictionary // JSON:{"uid":12...

  • yymodel 简单用法

    早就听说YYmodel很腻害了,今天学习了一下,不多逼逼直接写上代码 (一)假如你的返回的数据类型是字典里套数组数...

  • YYModel源码学习

    YYModel源码阅读 1.Demo简要介绍: 只有2个实现文件,NSObject+YYModel 和 YYCla...

网友评论

    本文标题:简单学习 YYModel

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