? 分析NSObject+YYModel.h文件,包括3個Category和壹個protocol,分別是:
字典studentDic中的key對應原字典playerDic中的key,studentDic中的Model由playerDic中的value轉化得到。
首先定義了兩個類,_YYModelMeta和_YYModelPropertyMeta,分別封裝了Model的信息和Model中各屬性的信息。
_YYModelMeta維護了Class的相關信息,下面是註釋:
_YYModelMeta是通過YYClassInfo對象的信息構建得到的。首先調用metaWithClass:cls方法,該方法如下:
維護了壹個鍵值對cache作為緩存,用cls作為key,調用CFDictionaryGetValue方法去緩存中查找,如果有,直接返回構建好的_____YYModelMeta對象,如果沒有找到或者needUpdate屬性標記為true,則根據cls創建壹個新的_YYModelMeta對象,並且存入緩存。這樣不需要每次都創建,提高了性能。
接下來看壹下initWithClass:方法,
下面分析幾個重要的方法:
YYModel的總體思想是以Model屬性的類型為準,如果JSON中對應名稱的value的類型和Model屬性類型不壹致,會對value的類型進行轉化,保證和Model屬性的類型壹致。如果兼容不了,不進行屬性賦值。下面分析壹下ModelSetValueForProperty方法:
該方法上文中提到該方法是用來JSON轉成Model的過程中對Model中的屬性進行賦值的方法,該方法做了部分基本類型的兼容:
YYModel還提供了壹些工具方法,下面簡單分析壹下:
YYModel作為壹個負責JSON數據和Model轉化的庫,十分易用和高效,特別是做了壹些類型的兼容和轉化,避免了服務端接口數據類型和客戶端Model對象類型不兼容導致的問題,例如執行了不存在的方法而導致崩潰。另壹方面,對YYModel的學習在壹定程度也促進了對runtime機制的學習和了解。
關於YYModel的分析到這兒先告壹段落,由於本人的iOS基礎有待提升,再加上表達能力有限,文中許多地方的分析和思路,表達的不是很準確和清楚,希望通過今後的學習和練習,提升自己的水平。