最近真是忙的一逼,程序员和产品真的是死对头,公司新来两个产品,本来项目紧,需求改这样,又改那样。不管是iOS还是Android都对他们发了脾气。我也有句“妈卖批”想对他们说。
YYModel的基本流程
在工作中一直是使用YYModel来将Json转换成model, 确实很好用,虽然知道和runtime有关,但是从没有看过内部的代码。因为我还很菜,没有阅读别人代码的能力。。不过最后还是硬着头皮看了点,有了点眉目。
老实说,其实我还是没有完全读懂,不过基本流程还算清楚。经过我的总结,YYModel的基本流程,约有以下几步:
- 使用的时候先调用modelWithJson,在内部将Json字符串,转换成NSDictionary,然后调用modelWithDictionary
- 如果存在相关类信息的缓存,则取缓存信息,否则,调用initWithClass方法,获取到类的方法、属性等信息,同时写入缓存
- 如果有实现modelPropertyWhiteList、modelPropertyBlackList、modelContainerPropertyGenericClass等方法,则相应的做处理,添加到对应的数据结构
- 沿继承链获取到属性对应的方法,如getter, setter,直达根对象
- 调用modelSetWithDictionary,根据model信息,调用setter方法,设置相关值。
粗略流程就是这样,根据YYModel,我自己也想尝试写一个,当然比不起大神写的,但是谁没有一个辣鸡的过程呢?写这个并不为实际使用,仅为学习和娱乐。
WLFModel的使用
首先根据使用的方法,同样的,按照YYModel的使用方法,用Json字符串做为输入。内部同样将Json转换成NSDictionary,再调用modelWithDictionary方法: