YYModel
YYModel 里面使用的技術
1、runtime 獲取model的屬性、變量、方法 ,
2、同事對metaClass進行了緩存, metaCache 和classCache ,緩存提高了效率
3、實現(xiàn)來了model - json - model archive
4、使用了CoreFoundation里面的方法, 算是提高了效率
5、KVC設置有關的值
JsonModel
JsonModel 通過runtime獲取屬性以及數(shù)目
1、初始化的時候獲取有關的屬性, 獲取的內(nèi)容緩存到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])
主要的處理數(shù)據(jù)的方法;
《1》 這里處理keyPath,使用了try...cache(慢) , for循環(huán)是否是校驗的類型(慢)、
4、 通過protocol來進行處理這個接口的內(nèi)容
MJExtension
獲取有關的信息,然后進行遍歷這個內(nèi)容, 完成的遍歷過程。
PS:
1: 所以JSONModel相比YYModel, 浪費太多時間帶for以及try...catch 里面了。
2: JsonModel 獲取屬性進行了檢查(耗時),并且有一個optional這個屬性檢查。
3:處理子的類型,都是使用了遞歸,這個沒啥好說的。
YYModel和jsonModel的對比,其實就死kvc和scanner的計算差別, 也是常規(guī)遍歷算法和hash遍歷設置算法的優(yōu)劣問題了。
YYModel 為什么比其他的模型塊?
1> runtime 解析信息,開始解析足夠的信息 ,
2> 緩存, metaCache 、classCache
3> coreFoundation 庫,提高了性能
4>一個判斷,屬性和數(shù)據(jù)的數(shù)目,然后進行判斷,就少了全部的遍歷
5> switch 替換if...else 庫 ,稍微高一丟丟。
PS: 考慮一個問題, 屬性的一些控制變量怎么處理? eg: readonly 。。。