常用場景:
將網(wǎng)絡(luò)請求Json數(shù)據(jù)、NSDictionary、數(shù)組,映射為數(shù)據(jù)模型。
將數(shù)據(jù)模型對象序列化成字典保存
特性:
實現(xiàn)對象正向反向映射, 自動判斷屬性類型,使用字典對應(yīng)的鍵值匹配屬性名進行初始化賦值
支持類型 NSString, NSDate, NSNumber, NSArray, 基本常量, SSObject及其子類
對于NSDate,如果是數(shù)字自動按照時間戳進行轉(zhuǎn)換, 如果是字符串,按照提供的時間格式轉(zhuǎn)換
支持數(shù)組直接序列化成對象!
實現(xiàn):
利用<objc/runtime>的消息機制來實現(xiàn)此功能
Objective-C中的runtime是經(jīng)常問到的一個問題,一般大公司面試,相關(guān)runtime的問題是必不可少的。,那什么是Runtime呢?
RunTime簡稱運行時。就是系統(tǒng)在運行的時候的一些機制,其中最主要的是消息機制。對于C語言,函數(shù)的調(diào)用在編譯的時候會決定調(diào)用哪個函數(shù)( C語言的函數(shù)調(diào)用請看這里 )。編譯完成之后直接順序執(zhí)行,無任何二義性。OC的函數(shù)調(diào)用成為消息發(fā)送。屬于動態(tài)調(diào)用過程。在編譯的時候并不能決定真正調(diào)用哪個函數(shù)(事實證明,在編 譯階段,OC可以調(diào)用任何函數(shù),即使這個函數(shù)并未實現(xiàn),只要申明過就不會報錯。而C語言在編譯階段就會報錯)。只有在真正運行的時候才會根據(jù)函數(shù)的名稱找 到對應(yīng)的函數(shù)來調(diào)用。具體Runtime的一些信息大家就去Google下吧。在這里就不為大家多多介紹了。
那來談?wù)勎疫@個小框架是怎么實現(xiàn)的吧。首先來看一下調(diào)用。

圖中的Info類必須是要繼承本框架的XJsonObject.h,當(dāng)執(zhí)行objectWithDictionary:方法調(diào)用時,XJsonObject會通過Runtime的class_copyPropertyList 來獲取數(shù)據(jù)模型的屬性列表,將會得到一個數(shù)據(jù)模型屬性的信息數(shù)組。當(dāng)拿到這個數(shù)組后,你就可以為所欲為了,做你想做的事情。通過property_getName、property_getAttributes拿到屬性名與類型等信息。當(dāng)拿到屬性、屬性類型,以及傳遞進來的Dictionary數(shù)據(jù),解析賦值那不就是拈手而來。具體的邏輯與實現(xiàn)就不過多介紹了,大家看代碼更容易理解。https://github.com/BerXiu/XJsonObject

引用:
pod 'XJsonObject'
github:https://github.com/BerXiu/XJsonObject
個人學(xué)習(xí)筆記,有更好的方法和建議,歡迎大神們指教一下。
如有關(guān)于runtime的其它好的框架,希望大家多多安利。謝謝~