MJExtension

Tag_3.0.10

<1> MJExtensionConst

.h ?-- ?宏定義error/log巫糙,一堆斷言严沥,宏定義重寫desc方法(模型轉(zhuǎn)字典打印)蛛勉,extern屬性類型

.m ?-- ?定義常量


<2> MJFoundation

.h? -- ?+isClassFromFoundation:

.m? --? +foundationClasses:剔桨,+isClassFromFoundation:


<3> MJProperty

.h? -- ?+cachedPropertyWithProperty:

.m? -- 2Dict-getters懶加載限匣,

+cachedPropertyWithProperty:?(懶加載_關(guān)聯(lián)對象緩存) -----> setProperty:(_property讥珍,_name历极,_type(cachedTypeWithCode - 封裝MJPropertyType))

setOriginKey:forClass:? --? NSString & NSArray

-->? propertyKeysWithStringKey:(多級映射stu.bag, ?i. 處理替換后的key(如: name.info[1].nameChangedTime)? ? ii. MJPropertyKey)

-->? setPropertyKeys:forClass: + propertyKeysForClass:(設(shè)置propertyKeysDict)

setObjectClassInArray:forClass: + objectClassInArrayForClass(objectClassInArrayDict)

valueForObject: && setValue:forObject:(KVC的一層封裝)


<4> MJPropertyKey

.h? --? keyName,keyType衷佃,valueInObject:

.m? --? valueInObject:(根據(jù)keyType判斷取值趟卸,NSDictionary & NSArray)


<5> MJPropertyType

.h? -- ?+cachedTypeWithCode

.m? --? +cachedTypeWithCode:(有從types_(緩存type)拿出,沒有自創(chuàng)放入) -> setCode:(各種判斷類型氏义,_idType锄列,_KVCDisabled,_code惯悠,_typeClass邻邮,_fromFoundation,_numberType克婶,_boolType)




<1> NSObject+MJClass

.h? --? 黑白名單block筒严,mj_setupAllowedPropertyNames:+mj_totalAllowedPropertyNames丹泉,白名單/歸檔配置mj_setupAllowedCodingPropertyNames:+mj_totalAllowedCodingPropertyNames

mj_setupIgnoredPropertyNames:+mj_totalIgnoredPropertyNames,黑名單/歸檔配置mj_setupIgnoredCodingPropertyNames:+mj_totalIgnoredCodingPropertyNames

mj_setupBlockReturnValue:key:

mj_enumerate/AllClasses:(自己和父類回調(diào)enumeration)

.m? -- ?+load:鸭蛙,+dictForKey:(返回黑白名單PropertyNames緩存字典)

mj_setupAllowedPropertyNames:+mj_setupAllowedCodingPropertyNames: + mj_setupIgnoredPropertyNames:+mj_setupIgnoredCodingPropertyNames: -------------> mj_setupBlockReturnValue:key: (關(guān)聯(lián)黑白名單block + removeAllObjects)

mj_totalAllowedPropertyNames:+mj_totalAllowedCodingPropertyNames: +mj_totalIgnoredPropertyNames: + mj_totalIgnoredCodingPropertyNames: -------------> mj_totalObjectsWithSelector:key: (黑白名單dict取摹恨,有返回,沒有娶视,從delegate方法中拿 - 從所有自己和父類的關(guān)聯(lián)對象中拿)


<2> NSObject+MJCoding

.h ?-- ?@protocol MJCoding - mj_allowed/ignoredCodingPropertyNames

mj_decode: + mj_encode: (mj_enumerateProperties:回調(diào)晒哄,黑白名單判定,encode: KVC取值 -> encodeObject:forKey:肪获,decode: decodeObjectForKey -> KVC賦值)

歸檔的實現(xiàn)宏 - MJExtensionCodingImplementation


<3> NSString+MJExtension

.h? --? mj_Underline <=> Camel寝凌,mj_firstCharUpper/Lower,mj_isPureInt孝赫,mj_url




<1> NSObject+MJKeyValue

.h? --? @protocol MJKeyValue - +mj_allowed/ignoredPropertyNames较木,mj_replacedKeyFromPropertyName,mj_replacedKeyFromPropertyName121寒锚,mj_objectClassInArray,mj_newValueFromOldValue:property违孝,mj_keyValuesDidFinishConvertingToObject刹前,mj_objectDidFinishConvertingToKeyValues

--? mj_keyValues~~

mj_objectWithFilename -> mj_objectWithFile (本地Dict)

mj_objectArrayWithFilename -> mj_objectArrayWithFile (本地Array)

mj_objectWithKeyValues:context:

mj_objectArrayWithKeyValuesArray:context:

mj_keyValuesWithKeys: ignoredKeys:

mj_keyValuesArrayWithObjectArray:keys:ignoredKeys:

mj_JSONData + mj_JSONObject (NSString + NSData + mj_keyValues) + mj_JSONString

.m? --??

mj_error + setMj_error (關(guān)聯(lián)error)

mj_referenceReplacedKeyWhenCreatingKeyValues,mj_isReferenceReplacedKeyWhenCreatingKeyValues (所有父類get關(guān)聯(lián)對象)

mj_objectWithKeyValues: context:-> mj_setKeyValues:context:? -> mj_enumerateProperties: ( 黑白名單雌桑,propertyKeysDict中剝洋蔥到value取值喇喉,值過濾,? ? i. 模型屬性 -> 遞歸校坑,ii. objectClass數(shù)組中模型(1. string array -> url array 2. mj_objectArrayWithKeyValuesArray:context: (遞歸)) ?iii. 基礎(chǔ)類型轉(zhuǎn)換?)

mj_keyValuesWithKeys: ignoredKeys: (mj_enumerateProperties: 黑白名單檢測拣技,取值,? i.模型屬性 -> 遞歸耍目,ii. 數(shù)組里面有模型 -> mj_keyValuesArrayWithObjectArray:keys:ignoredKeys: (遞歸)膏斤,iii. NSURL -> absoluteString

iv.參考delegate方法(if. 枚舉propertyKeysDict中array中propertyKey - (if >=2. 下一個根據(jù)類型創(chuàng)建加入前一個 ?else.只有一個邪驮,直接賦值) ?else. 直接賦值) )


<2> NSObject+MJProperty

.h? -- block: MJPropertiesEnumeration莫辨,MJReplacedKeyFromPropertyName/121,MJObjectClassInArray毅访,MJNewValueFromOldValue

mj_enumerateProperties:

mj_setupNewValueFromOldValue (關(guān)聯(lián)MJNewValueFromOldValue_Block) + mj_getNewValueFromObject (delegate方法 + 自己和父類關(guān)聯(lián)block)

mj_setupReplacedKeyFromPropertyName/121 ((關(guān)聯(lián)block + removeAllObjects))

mj_setupObjectClassInArray: -> mj_setupBlockReturnValue:key: (關(guān)聯(lián)block + removeAllObjects)

.m? -- ?

+load:沮榜,+dictForKey: (緩存Dict: replacedKeyFromPropertyName/121Dict_,newValueFromOldValueDict_喻粹,objectClassInArrayDict_蟆融,cachedPropertiesDict_)

propertyKey: (2delegate方法 + 所有父類MJReplacedKeyFromPropertyName121_Block + replacedKeyFromPropertyNameDict_)? --? 將屬性名換為其他key去字典中取值

propertyObjectClassInArray: (delegate方法 + 所有父類的 objectClassInArrayDict_)

--mj_enumerateProperties

-->properties-- cachedPropertiesDict_緩存,mj_enumerateClasses(enumeration回調(diào)自己和父類 + class_copyPropertyList守呜,遍歷 - (cachedPropertyWithProperty:封裝MJProperty)型酥,(propertyKey:替換key)setOriginKey:設(shè)置propertyKeysDict山憨,(propertyObjectClassInArray數(shù)組中需要轉(zhuǎn)換的模型類)setObjectClassInArray:設(shè)置objectClassInArrayDict)

-->? enumeration回調(diào)所有cachedProperties




使用:

(1)簡單字典 -> 模型

(2)簡單JSON -> 模型

(3)復(fù)雜字典 -> 模型 (模型中有模型,模型中有數(shù)組中有模型)

(4)簡單字典 -> 模型 (key替換冕末,多級映射)

[模型類 ?mj_objectWithKeyValues:~~]

(5)字典數(shù)組 -> 模型數(shù)組

[模型類 ?mj_objectArrayWithKeyValuesArray:~~]

(6)模型 -> 字典

[模型實例 ?mj_keyValues:~~]

[模型實例 ?mj_keyValuesWithKeys:~~]

(7)多級映射模型

[模型實例 ?mj_keyValues:~~]

[模型實例? mj_keyValuesWithIgnoredKeys:@[]]

[模型實例? mj_JSONString]

(8)模型數(shù)組 -> 字典數(shù)組

[模型類 ?mj_keyValuesArrayWithObjectArray:]

(9)Core Data && NSCoding




模型 -> 字典


跟著MJExtension實現(xiàn)簡單的字典轉(zhuǎn)模型框架

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萍歉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子档桃,更是在濱河造成了極大的恐慌枪孩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藻肄,死亡現(xiàn)場離奇詭異蔑舞,居然都是意外死亡,警方通過查閱死者的電腦和手機嘹屯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門攻询,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人州弟,你說我怎么就攤上這事钧栖。” “怎么了婆翔?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵拯杠,是天一觀的道長。 經(jīng)常有香客問我啃奴,道長潭陪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任最蕾,我火速辦了婚禮依溯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瘟则。我一直安慰自己黎炉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布醋拧。 她就那樣靜靜地躺著拜隧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趁仙。 梳的紋絲不亂的頭發(fā)上洪添,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音雀费,去河邊找鬼干奢。 笑死,一個胖子當(dāng)著我的面吹牛盏袄,可吹牛的內(nèi)容都是我干的忿峻。 我是一名探鬼主播薄啥,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逛尚!你這毒婦竟也來了垄惧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤绰寞,失蹤者是張志新(化名)和其女友劉穎到逊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滤钱,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡觉壶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了件缸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铜靶。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖他炊,靈堂內(nèi)的尸體忽然破棺而出争剿,到底是詐尸還是另有隱情,我是刑警寧澤痊末,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布蚕苇,位于F島的核電站,受9級特大地震影響舌胶,放射性物質(zhì)發(fā)生泄漏捆蜀。R本人自食惡果不足惜疮丛,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一幔嫂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧誊薄,春花似錦履恩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至片吊,卻和暖如春绽昏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俏脊。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工全谤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爷贫。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓认然,卻偏偏與公主長得像补憾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卷员,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容