當前位置:編程學習大全網 - 源碼下載 - iOS源碼解析—YYModel(NSObject+YYModel)

iOS源碼解析—YYModel(NSObject+YYModel)

iOS源碼解析—YYModel(YYClassInfo) 分析了如何根據OC的Class對象構建YYClassInfo對象,為接下來的JSON數據和Model轉換作準備,這篇文章開始講解NSObject+YYModel。

? 分析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基礎有待提升,再加上表達能力有限,文中許多地方的分析和思路,表達的不是很準確和清楚,希望通過今後的學習和練習,提升自己的水平。

  • 上一篇:有哪些方法可以判斷U盤是否中病毒了
  • 下一篇:龍愛量子產業集團
  • copyright 2024編程學習大全網