作iOS開發總會接觸到一些第三方庫,這裏整理一下,作一些吐槽。
html
目前比較活躍的社區仍舊是Github,除此之外也有一些不錯的庫散落在Google Code、SourceForge等地方。因爲Github社區太過主流,這裏主要介紹一下Github裏面流行的iOS庫。java
首先整理了一份Github上排名靠前的iOS庫(大概600個repos)ios
除了逛一下每日/每個月流行以外,也能夠到這裏來看一下整個iOS Repos的排名。git
下面是一些比較流行的第三方庫:github
HTTPweb
相比較之下,AFNetworking是目前最優秀的一個了:輕量、易用、使用者多、開發者有在積極維護。在AFN出現以前,這個角色是由ASIHTTPRequest扮演的,只是到如今年久失修了。關於AFN和ASI的對比,這裏有一篇不錯的文章www.infoq.com/cn/articles…。除此以外,MKNetworkKit和RestKit也有必定的使用者。sql
Socket編程
CocoaAsyncSocket無疑是目前封裝得最完善的Socket庫了:支持異步TCP/UDP,支持GCD,Objective-C接口封裝。。目前沒有發現能夠與之相比的同類產品。。json
JSONapi
JSONKit算是第三方中最優秀的一個了:性能很高,文件少。在JSONKit以前,SBJson很是很是流行,可是SBJson性可以差,只是因爲歷史緣由仍然存在在某些工程裏面。若是工程只須要支持iOS5以上的系統,那就能夠放棄那些第三方Json庫了,直接用系統提供的NSJSONSerialization,性能比第三方的好,又是官方API。。
XMPP
如今作個實時聊天,XMPP協議算是很成熟的方案了。XMPPFramework一個很不錯的選擇,能夠直接和OpenFire服務器打交道。項目不大人手很少的話,能夠看看這個。
基礎工具類
SSToolkit算是一個不錯的工具包,提供各類好比編碼、加密、字符串處理等等東西,還提供了一些不錯的自定義控件,而且文檔很是齊全。
框架
過去有不少人再用three20,這個東西太大過重,文檔又少,到頭來連Facebook都中止維護了。做爲替代品nimbus如今流行了開來,關鍵在於它文檔齊全。國內有個MVC框架叫BeeFramework,號稱是頂級框架而且功能超過nimbus,有興趣的能夠看一下。ReactiveCocoa把響應式編程這種上流的東西帶了過來,值得試一試。。
數據存儲
仍是挺多人(好比我)喜歡直接跟SQLite打交道的,這方面fmdb封裝的很不錯。若是用CoreData來作存儲的,能夠用一下MagicalRecord。
圖像處理
GPUImage無疑是這方面的集大成者了。用OpenGL ES2.0來實時處理圖片和視頻流,性能和功能都是頂尖的。
開發和調試工具
PonyDebugger看上去是一個不錯的調試工具,能夠在電腦瀏覽器上遠程調試iOS程序、查看試圖層次、網絡等等。CocoaLumberjack是個Log工具,號稱是能夠提供企業級Log,使用者也挺多。
爲了瞭解一下目前第三方庫的普及程度,下面列舉一些知名App對第三方庫的依賴。
網易新聞
Garageband
SBJson(json-framework)
iWork三套件
多看閱讀
Skia(Google)
淘寶
SBJson(json-framework)
微信
ASIHTTPRequest
FMDB
CocoaAsyncSocket
JSONKit
MBProgressHUD
OpenUDID
SBJson
SVPullToRefresh
百度地圖
微博
人人
能夠看到,這些大型的App的依賴都很混亂,因此稍微解釋一下。這些大公司都有一個iOS團隊來協同開發,團隊成員的水平也良莠不齊。有時因爲歷史緣由,例如某個App的某個組件依賴了ASIHttpRequest,但以後的新人改用了AFNetworking,就形成上面這種比較混亂的庫依賴關係。這就形成難以維護、代碼冗餘等問題了。因此,引入一個第三方庫必定要慎重考慮,若是可能,儘可能本身開發和實現相應的功能,第三方庫儘可能只做爲參考。 小團隊或者我的開發者能夠沒必要過多考慮,開發速度優先。
最後吐槽一下cocoapods。
一個語言的流行總伴隨着第三方庫的豐富,相應的也會出現依賴庫管理的工具。cocoapods之於ObjC,就像maven/gradle 之於java、gem之於ruby那樣。 cocoapods基本上是建立在在github社區上的,開源而且社區活躍。除了用github上的中央倉庫外,也能夠本身搭建私服什麼的隨便亂搞。
但就我來講,不推薦使用cocoapods,吐槽以下:
1.像maven這樣的工具,是爲了管理龐大的第三方庫依賴、控制版本、構建工程等等而產生的,很難想象一個依賴了上百個jar包的web項目不用包管理構建會變成什麼樣。。可是,iOS開發是客戶端的開發啊,若是真有一個工程依賴了那麼多第三方工具,這個App能保持穩定嗎。。一般狀況下一個iOS工程不會有那麼多包依賴。
2.按常理來看,一我的的手頭不可能有太多的工程同時進行,也不太可能一天以內建立N個App來發布。cocoapods能節省的重複工做量,還不如它帶來麻煩多。。
3.修改和調試不便。若是某個第三方庫須要少許修改才能實現需求,用cocoapods來處理會比較麻煩。
關於第三方庫,一樣也不推薦過多使用,吐槽以下:
1.消耗時間,一個開源庫,拿過來須要仔細考察代碼質量,確認是否足夠可靠。若是出現問題,須要仔細審查開源庫的內部實現。若是這些工做太消耗時間,還不如本身實現。
2.可維護性差。一旦遇到系統升級、API更換,第三方庫不能確保不出問題。當出問題後也難以找到人來維護。若是跟進第三方庫的改變,仍然容易出現新問題。
3.法律問題。。大公司須要仔細審查許可協議,小公司各類不怕那就沒問題。。