YYModel
YYModel 几个方法结构YYModel 里面使用的技术
1、runtime 获取model的属性、变量、方法 ,
2、同事对metaClass进行了缓存, metaCache 和classCache ,缓存提高了效率
3、实现来了model - json - model archive
4、使用了CoreFoundation里面的方法, 算是提高了效率
5、KVC设置有关的值
JsonModel
JsonModel 通过runtime获取属性以及数目
1、初始化的时候获取有关的属性, 获取的内容缓存到class里面,runtime进行绑定model的值,相当于缓存,这个是没有问题的。 不过这个过程使用了scanner来处理属性。
2、-(BOOL)__doesDictionary:(NSDictionary*)dict matchModelWithKeyMapper:(JSONKeyMapper*)keyMapper error:(NSError**)err
这个方法检测是否符合, 即为哪些属性的值必须要有的,这个感觉没有必要 , 这里也使用了for来进行了校验
3、if (![self __importDictionary:dict withKeyMapper:self.__keyMapper validation:YES error:err])
主要的处理数据的方法;
《1》 这里处理keyPath,使用了try...cache(慢) , for循环是否是校验的类型(慢)、
4、 通过protocol来进行处理这个接口的内容
MJExtension
获取有关的信息,然后进行遍历这个内容, 完成的遍历过程。
PS:
1: 所以JSONModel相比YYModel, 浪费太多时间带for以及try...catch 里面了。
2: JsonModel 获取属性进行了检查(耗时),并且有一个optional这个属性检查。
3:处理子的类型,都是使用了递归,这个没啥好说的。
YYModel和jsonModel的对比,其实就死kvc和scanner的计算差别, 也是常规遍历算法和hash遍历设置算法的优劣问题了。
YYModel 为什么比其他的模型块?
1> runtime 解析信息,开始解析足够的信息 ,
2> 缓存, metaCache 、classCache
3> coreFoundation 库,提高了性能
4>一个判断,属性和数据的数目,然后进行判断,就少了全部的遍历
5> switch 替换if...else 库 ,稍微高一丢丢。
PS: 考虑一个问题, 属性的一些控制变量怎么处理? eg: readonly 。。。
网友评论