簡(jiǎn)單學(xué)習(xí) YYModel

YYModel

簡(jiǎn)單一看 YY 的代碼規(guī)模就是和其他庫沒有辦法相比的, 只有兩個(gè)文件
其中把一個(gè)類的信息拆分為下面這幾種類

  • YYClassInfo
  • YYClassIvarInfo
  • YYClassMethodInfo
  • YYClassPropertyInfo

還有兩個(gè)私有的類, 用來解析用戶設(shè)定的自定義模型, 通過這兩個(gè)類的分析, 來快速的得知如何去進(jìn)行轉(zhuǎn)化

  • _YYModelPropertyMeta
  • _YYModelMeta
簡(jiǎn)單說一下解析流程

1 獲取要解析為的對(duì)象的 CLASS, 并生成實(shí)例
2 調(diào)用這個(gè)對(duì)象的 yy_modelSetWithDictionary 方法
2.1 這個(gè)方法會(huì)在轉(zhuǎn)化前后判斷是否需要執(zhí)行 modelCustomWillTransformFromDictionary 和 modelCustomTransformFromDictionary 方法
2.2 使用 CFDictionaryApplyFunction 等一系列 CF 賦值

轉(zhuǎn)化回來的流程是這樣的

1 所有的方法最后都會(huì)調(diào)用到一個(gè) ModelToJSONObjectRecursive 的函數(shù)上
1.1 這個(gè)函數(shù)做的事情基本就是判斷類型 然后遞歸轉(zhuǎn)化, 最后傳出來一個(gè)只有基本類型的對(duì)象
1.2 其中如果是自定義的類 那么仍然需要 獲取 _YYModelMeta 然后進(jìn)行轉(zhuǎn)化
1.3 如果用戶提供了 modelCustomTransformToDictionary 方法, 那么根據(jù)用戶自己的方法來再進(jìn)行一次額外的轉(zhuǎn)化
2 轉(zhuǎn)化完之后再根據(jù)各自不同的需求轉(zhuǎn)化為相應(yīng)的類型

復(fù)制, equal, hash 等的判斷邏輯
  • hash 是獲取 _YYModelMeta 和 每一個(gè) _YYModelPropertyMeta 然后 ^= 每一個(gè)屬性的 hash 值
  • equal 的的判斷優(yōu)先級(jí)是 指針 類型 哈希 最后才是值得判斷
  • copy 是獲取 所有 _YYModelPropertyMeta 然后判斷類型 之后進(jìn)行復(fù)制
系列化 反序列化

簡(jiǎn)單來說就是 通過 _YYModelPropertyMeta 然后判斷類型, 之后再進(jìn)行序列化和反序列化

一些值得學(xué)習(xí)的細(xì)節(jié)

  • YYClassInfo 中利用單例維護(hù)了 一個(gè) chache, 并且使用信號(hào)量來保證安全
  • 所有內(nèi)部非繼承非初始化的私有方法都是以 '_' 開頭的, 雖然不一定一定好, 但是在某種程度上也讓代碼更加清晰
  • 使用 fine force_inline __inline__ __attribute__((always_inline)) 定義內(nèi)聯(lián)函數(shù)
  • 使用 -> 的方式取值, 更加清晰
  • 使用 CF 的方法 和 單利緩存 來提升速度
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子将鸵,更是在濱河造成了極大的恐慌笛钝,老刑警劉巖瓜挽,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晨抡,死亡現(xiàn)場(chǎng)離奇詭異派昧,居然都是意外死亡特笋,警方通過查閱死者的電腦和手機(jī)剃浇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猎物,“玉大人虎囚,你說我怎么就攤上這事∧枘ィ” “怎么了淘讥?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)堤如。 經(jīng)常有香客問我蒲列,道長(zhǎng),這世上最難降的妖魔是什么煤惩? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任嫉嘀,我火速辦了婚禮,結(jié)果婚禮上魄揉,老公的妹妹穿的比我還像新娘剪侮。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布瓣俯。 她就那樣靜靜地躺著杰标,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彩匕。 梳的紋絲不亂的頭發(fā)上腔剂,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音驼仪,去河邊找鬼掸犬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绪爸,可吹牛的內(nèi)容都是我干的湾碎。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼奠货,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼介褥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起递惋,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤柔滔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后萍虽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睛廊,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年贩挣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喉前。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡王财,死狀恐怖卵迂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绒净,我是刑警寧澤见咒,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站挂疆,受9級(jí)特大地震影響改览,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缤言,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一宝当、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胆萧,春花似錦庆揩、人聲如沸俐东。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虏辫。三九已至,卻和暖如春锈拨,著一層夾襖步出監(jiān)牢的瞬間砌庄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工奕枢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娄昆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓缝彬,卻偏偏與公主長(zhǎng)得像稿黄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跌造,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,328評(píng)論 25 707
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,732評(píng)論 0 9
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案族购? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,762評(píng)論 1 92
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理壳贪,服務(wù)發(fā)現(xiàn),斷路器寝杖,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,523評(píng)論 1 51