第三方框架學(xué)習(xí)—YYKit

偶然間看到Y(jié)YKit,Google一下牧氮,我的天扒砬弧!漫天的贊嘆聲踱葛,再打開源代碼一看丹莲,感覺自己沒有敲過代碼,決心好好整理自己的心情尸诽,遂打開源碼好好學(xué)習(xí)一番甥材。

** ibireme**和YYKit

可以看一下唐巧對ibireme的采訪
搜索一下ibireme的微博
簡言之,渴望成為iOS大牛的新人逊谋,只有兩條捷徑擂达,一是大量地閱讀優(yōu)秀項(xiàng)目的源代碼,另一個就是自己動手實(shí)踐來嘗試胶滋。

YYKit

YYKit 是一組龐大、功能豐富的 iOS 組件悲敷。
為了盡量復(fù)用代碼究恤,這個項(xiàng)目中的某些組件之間有比較強(qiáng)的依賴關(guān)系。為了方便其他開發(fā)者使用后德,我從中拆分出以下獨(dú)立組件:

  • YYModel — 高性能的 iOS JSON 模型框架部宿。
  • YYCache — 高性能的 iOS 緩存框架。
  • YYImage — 功能強(qiáng)大的 iOS 圖像框架瓢湃。
  • YYWebImage — 高性能的 iOS 異步圖像加載框架理张。
  • YYText — 功能強(qiáng)大的 iOS 富文本框架。
  • YYKeyboardManager — iOS 鍵盤監(jiān)聽管理工具绵患。
  • YYDispatchQueuePool — iOS 全局并發(fā)隊(duì)列管理工具雾叭。
  • YYAsyncLayer — iOS 異步繪制與顯示的工具。
  • YYCategories — 功能豐富的 Category 類型工具庫落蝙。

YYModel的學(xué)習(xí)

iOS開發(fā)總會用到各種JSON模型轉(zhuǎn)換庫织狐,本人最常用的MJExtension(小碼哥出品),轉(zhuǎn)換效率很高暂幼,使用也比較簡單,只要前后臺約定好移迫,json直接就轉(zhuǎn)成了model旺嬉。另外還有JSONModel,Mantle厨埋,F(xiàn)astEasyMapping邪媳,Manually等等。關(guān)于這幾個庫的測評荡陷,可以點(diǎn)擊ibireme的iOS JSON 模型轉(zhuǎn)換庫評測雨效。
《iOS JSON 模型轉(zhuǎn)換庫評測》
本文中ABCDE表示等級,A為最佳亲善,E為最差(僅為個人學(xué)習(xí)用)

性能 容錯性 功能 侵入性
Mantle E B 會進(jìn)行對象類型檢查 A 可定制性最高 B 需要 Model 繼承自某個基類设易,靈活性稍差,但功能豐富
JSONModel C 和 MJExtension 差不多蛹头,Mantle 性能高 D 沒有對錯誤類型的檢測顿肺,沒有對 App 的保護(hù) B 使用比較簡單,但功能相對 Mantle 稍弱 B 需要 Model 繼承自某個基類渣蜗,靈活性稍差屠尊,但功能豐富
MJExtension C 和JSONModel 差不多,Mantle 性能高 C 對部分對象進(jìn)行自動轉(zhuǎn)換 B 使用比較簡單耕拷,但功能相對 Mantle 稍弱 A- Category 方式來實(shí)現(xiàn),添加了一些沒有前綴的方法讼昆,易引起沖突
FastEasyMapping B 較快 E 沒有自動轉(zhuǎn)換的機(jī)制 C 功能最少,使用也不算方便 C 采用工具類來實(shí)現(xiàn)骚烧,使用靈活浸赫,但不方便
YYModel A 快,接近手寫代碼的效率 A 會進(jìn)行對象類型檢查 B 使用比較簡單赃绊,但功能相對 Mantle 稍弱 A Category 方式來實(shí)現(xiàn)

附錄:原文中關(guān)于YYModel的幾個優(yōu)化tips不錯既峡,大家可以學(xué)習(xí)一下!

  1. 緩存
    Model JSON 轉(zhuǎn)換過程中需要很多類的元數(shù)據(jù)碧查,如果數(shù)據(jù)足夠小运敢,則全部緩存到內(nèi)存中。
  1. 查表
    當(dāng)遇到多項(xiàng)選擇的條件時忠售,要盡量使用查表法實(shí)現(xiàn)传惠,比如 switch/case,C Array稻扬,如果查表?xiàng)l件是對象卦方,則可以用 NSDictionary 來實(shí)現(xiàn)。
  1. 避免 KVC
    Key-Value Coding 使用起來非常方便腐螟,但性能上要差于直接調(diào)用 Getter/Setter愿汰,所以如果能避免 KVC 而用 Getter/Setter 代替困后,性能會有較大提升。
  1. 避免 Getter/Setter 調(diào)用
    如果能直接訪問 ivar衬廷,則盡量使用 ivar 而不要使用 Getter/Setter 這樣也能節(jié)省一部分開銷摇予。
  1. 避免多余的內(nèi)存管理方法
    在 ARC 條件下,默認(rèn)聲明的對象是 __strong 類型的吗跋,賦值時有可能會產(chǎn)生 retain/release 調(diào)用侧戴,如果一個變量在其生命周期內(nèi)不會被釋放,則使用 __unsafe_unretained 會節(jié)省很大的開銷跌宛。
    訪問具有 __weak 屬性的變量時酗宋,實(shí)際上會調(diào)用 objc_loadWeak() 和 objc_storeWeak() 來完成,這也會帶來很大的開銷疆拘,所以要避免使用 __weak 屬性蜕猫。
    創(chuàng)建和使用對象時,要盡量避免對象進(jìn)入 autoreleasepool哎迄,以避免額外的資源開銷回右。
  1. 遍歷容器類時,選擇更高效的方法
    相對于 Foundation 的方法來說漱挚,CoreFoundation 的方法有更高的性能翔烁,用 CFArrayApplyFunction() 和 CFDictionaryApplyFunction() 方法來遍歷容器類能帶來不少性能提升,但代碼寫起來會非常麻煩旨涝。
  1. 盡量用純 C 函數(shù)蹬屹、內(nèi)聯(lián)函數(shù)
    使用純 C 函數(shù)可以避免 ObjC 的消息發(fā)送帶來的開銷。如果 C 函數(shù)比較小白华,使用 inline 可以避免一部分壓棧彈棧等函數(shù)調(diào)用的開銷慨默。
  1. 減少遍歷的循環(huán)次數(shù)
    在 JSON 和 Model 轉(zhuǎn)換前,Model 的屬性個數(shù)和 JSON 的屬性個數(shù)都是已知的弧腥,這時選擇數(shù)量較少的那一方進(jìn)行遍歷业筏,會節(jié)省很多時間。

YYModel的特性

高性能: 模型轉(zhuǎn)換性能接近手寫解析代碼鸟赫。
自動類型轉(zhuǎn)換: 對象類型可以自動轉(zhuǎn)換,詳情見下方表格消别。
類型安全: 轉(zhuǎn)換過程中抛蚤,所有的數(shù)據(jù)類型都會被檢測一遍,以保證類型安全寻狂,避免崩潰問題岁经。
無侵入性: 模型無需繼承自其他基類。
輕量: 該框架只有 5 個文件 (包括.h文件)蛇券。
文檔和單元測試: 文檔覆蓋率100%, 代碼覆蓋率99.6%缀壤。

YYModel的代碼

字典轉(zhuǎn)模型

@interface HelpModel : NSObject
@property(nonatomic,copy)NSString *title;
@property(nonatomic,copy)NSString *html;
@property(nonatomic,copy)NSString *ID;
@end

Paste_Image.png

ps :導(dǎo)入NSArray分類

在VC中調(diào)用

Paste_Image.png

打印出的部分結(jié)果


Paste_Image.png

歸檔解檔

直接調(diào)用兩個方法


Paste_Image.png

數(shù)據(jù)校驗(yàn)與自定義轉(zhuǎn)換

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末樊拓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子塘慕,更是在濱河造成了極大的恐慌筋夏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图呢,死亡現(xiàn)場離奇詭異条篷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛤织,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門赴叹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人指蚜,你說我怎么就攤上這事乞巧。” “怎么了摊鸡?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵绽媒,是天一觀的道長。 經(jīng)常有香客問我柱宦,道長些椒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任掸刊,我火速辦了婚禮免糕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忧侧。我一直安慰自己石窑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布蚓炬。 她就那樣靜靜地躺著松逊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肯夏。 梳的紋絲不亂的頭發(fā)上经宏,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音驯击,去河邊找鬼烁兰。 笑死,一個胖子當(dāng)著我的面吹牛徊都,可吹牛的內(nèi)容都是我干的沪斟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼暇矫,長吁一口氣:“原來是場噩夢啊……” “哼主之!你這毒婦竟也來了择吊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤槽奕,失蹤者是張志新(化名)和其女友劉穎几睛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體史翘,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枉长,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了琼讽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片必峰。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钻蹬,靈堂內(nèi)的尸體忽然破棺而出吼蚁,到底是詐尸還是另有隱情,我是刑警寧澤问欠,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布肝匆,位于F島的核電站,受9級特大地震影響顺献,放射性物質(zhì)發(fā)生泄漏旗国。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一注整、第九天 我趴在偏房一處隱蔽的房頂上張望能曾。 院中可真熱鬧,春花似錦肿轨、人聲如沸寿冕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驼唱。三九已至,卻和暖如春驹暑,著一層夾襖步出監(jiān)牢的瞬間玫恳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工优俘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纽窟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓兼吓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親森枪。 傳聞我的和親對象是個殘疾皇子视搏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫审孽、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評論 4 61
  • 二月里浑娜,楊柳迷離杏花雨佑力,笛聲吹進(jìn)春色里。曉來終成姣杏妝筋遭,踏遍陌上春如許打颤。 三月里,歌盡桃花人未休漓滔,晨起妝成又成酒编饺。...
    深巷梨花閱讀 352評論 0 1
  • 完蛋了,我得了跟兒子的分離焦慮响驴,傷心透且。兒子竟然哭著跟姥姥走不在家,是因?yàn)榻o的太多豁鲤,還是因?yàn)榻o的愛太少秽誊,敏感氣質(zhì)的孩...
    王曉懶閱讀 141評論 0 0
  • 在晚上瀏覽網(wǎng)頁的看到一個統(tǒng)計锅论,統(tǒng)計中說人一生最大的遺憾是什么,結(jié)果是90%以上的是后悔自己年輕時不夠努力楣号,以致于自...
    天涯落花零閱讀 676評論 0 0
  • 至潔之物常以為濁最易; 至方正之物常失棱角; 至大之聲常無聲無息竖席; 至情之極常無言以表耘纱。 ??? 晚安,我的Leslie??
    草乙君閱讀 196評論 0 0