美文网首页
MJExtension代码跟踪

MJExtension代码跟踪

作者: 不动科气坏了 | 来源:发表于2019-02-25 17:06 被阅读0次

上周将Mantle替换为MJExtension,这周简单看看MJExtension大概是个流程

mj代码跟踪

首先入口一般是mj_objectWithKeyValues:(id)keyValues 转到 mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext);

mj_objectWithKeyValues

context为nil 直接看mj_setKeyValues:(id)keyValues; 

mj_setKeyValues-1

MJProperty分类中 + (void)mj_enumerateProperties:(MJPropertiesEnumeration)enumeration是封装的一个遍历方法,

mj_enumerateProperties

方法中[self properties] 获取模型的属性,会先从缓存中取出 以当前类为key、MJProperty数组为value的字典,若无则反复遍历自己编写的类及父类 取出其中的所有成员

                unsignedint outCount =0;

                objc_property_t *properties =class_copyPropertyList(c, &outCount);

properties

然后遍历所有成员变量,将成员变量封装成MJProperty,MJProperty添加关联对象到self中:

cachedPropertyWithProperty

之后为MJProperty设置所属类,设置key(可能会替换)

+ (id)propertyKey:(NSString *)propertyName

查看是否有需要替换的propertyName,用propertyName作为OriginKey

setOriginKey

包装后的MJProperty 加入cachedProperties 保存cache。

再回到MJKeyValue分类setKeyValues中,遍历cacheProperties中的MJProperty。以类名为Key取出propertyKey列表,遍历propertyKey列表,用propertyName为property从KeyValues中取值,取出的value即为model中属性对应的值,该值需要进行新旧值替换、类型转换(如不可变类转换为可变类类,url转换为string number转换bool转换等)等,遍历完毕就判断是否有实现mj_keyValuesDidFinishConvertingToObject方法执行。

mj_setKeyValues

平时用的另一种就是对象数组字典转换了,其实也是一样的,多一层遍历,将model加入数组中:

mj_objectArrayWithKeyValuesArray

相关文章

  • MJExtension代码跟踪

    上周将Mantle替换为MJExtension,这周简单看看MJExtension大概是个流程 mj代码跟踪 首先...

  • Vim 之代码跟踪

    这一篇聊聊我们如何通过 vim 浏览代码 代码浏览最重要的就是跟踪代码, 跟踪定义, 跟踪声明, 跟踪调用, 跟踪...

  • MJExtension源码学习(二)

    接上篇MJExtension源码学习(一) 总览 这一次我们来看MJExtension最新版本的代码,当前最新为3...

  • 多线程网络05

    1 JSON解析代码 1.1 JSON -> OC 1.2 OC -> JSON 2 MJExtension 2....

  • Btrace跟踪代码

    安装Btrace工具 btrace是一个开源项目,选择适合自己PC的bin文件并下载,并配置好环境变量,控制台查看...

  • MJExtension框架源码分析

    MJExtension框架源码分析 MJExtension框架源码分析

  • iOS 字典模型互转框架 MJExtension

    MJExtension MJExtension是一套字典和模型之间互相转换的超轻量级框架 MJExtension能...

  • MJExtension

    MJExtension:https://github.com/CoderMJLee/MJExtension[htt...

  • MJExtension的使用

    MJExtension的github地址 1. Getting Started【开始使用】 只需要一行代码,就能实...

  • 05 MJExtension的使用

    MJExtension的github地址 1. Getting Started【开始使用】 只需要一行代码,就能实...

网友评论

      本文标题:MJExtension代码跟踪

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