因爲iOS SDK相對比較底層,所以開發者就得受累多做一些體力活。不過幸運的是,有很多第三方的類庫可以用來簡化很多不必要的工作。
(1)AFNetworking
目前比較推薦的iOS網絡請求組件,默認網絡請求是異步,通過block回調的方式對返回數據進行處理。
需要注意的是AFNetworking對服務器返回的ContentType要求比較嚴格,默認只支持application/json的返回。所以可能需要添加對text/html返回的支持,否則可能無法獲得返回數據。
另外就是文件上傳,這裏推薦使用第二種:
[formData appendPartWithFormData: name:];
[formData appendPartWithFileData: name: fileName: mimeType:];
第一種只需要傳入表單名和文件流,源碼也是根據文件流獲得對應的文件名和文件類型,然後調用第二種方法。但是樓主遇到了使用第一種方法,提交後後臺判斷爲非文件上傳,無法獲得文件流。還有如果後臺是根據文件後綴文件類型,那麼第一種也無法使用。
AFNetworking是異步的,也可以使用同步的網絡請求方法.
(2).FMDB
對sqlite數據庫操作進行了封裝,demo也比較簡單。
(3).MBProgressHUD
也是iOS項目常用的一個組件,用於顯示過渡效果的,比如網絡請求之前顯示loading,網絡結束隱藏loading。建議封裝在BaseViewController中,所有ViewController繼承就能使用。
(4).MJRefresh
這個是李明傑老師的作品,自己的OC基礎就是看他的視頻半個週末就基本拿下了。MJRefresh主要用於刷新操作,提供了常用的刷新操作,還有刷新動畫,用着很好用。建議把方法封裝在BaseViewController中,這樣修改刷新操作時,就只需要改動一份。(之前用的舊版MJRefresh,只支持普通的刷新,不支持動畫,後來更新後版本變化比較大,舊的方法已經不推薦使用了,所以還是封裝基類中使用比較好,方便以後修改)
(5).SDWebImage
也是iOS最常用的一個組件,用戶加載網絡圖片,可以緩存到本地。大概原理時,第一次加載後,會根據url加密作爲文件名緩存在本地,如果再次加載圖片時,就直接從本地加載。用着也比較簡單。這裏也分享遇到的一個問題,先從網絡加載一張小圖,然後小圖作爲佔位圖,再從網絡加載一張大圖。
[imageView sd_setImageWithURL:[NSURL URLWithString:imageURLString] placeholderImage:DefaultPostPic];
[imageView sd_setImageWithURL:[NSURL URLWithString:_bigImageURLStringArray[i]] placeholderImage:imageView.image options:SDWebImageDelayPlaceholder completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
}];
(6).RDVTabBarController
一個TabBar組件,可以方便設置底部菜單的文字圖片,點擊效果,小紅點提示等。
(7).Toast
類似android的toast提示效果,封裝在BaseViewController中,需要的地方進行提示。
(8).XMPPFramework
iOS唯一的xmpp類庫,作者在添加了xep-0198協議支持(流管理,用於xmpp斷線重連)
(9).TPKeyboardAvoiding
用戶鍵盤彈出自動計算高度,進行屏幕滾動操作。
(10).AMR
做即時通訊的音頻處理,目前我們的即時通訊使用的錄音文件是m4a,便於web端的音頻播放。
(11).TQRichTextView
用於做富文本視圖控件顯示,用於即時通訊的表情顯示,以及資源評論的富文本顯示。
(12).CSGrowingTextView
用作即時通訊文本框和評論文本框使用,可以顯示多行輸入。
(13).MJExtension
也是李明傑老師的作品,用於json轉model進行使用,有點類似於java中谷歌的Gson。轉換效率據說也很高,使用也比較簡單,只要前後臺約定好,json直接就轉成了model。一個工作多年的iOS朋友說,一個項目主要的是對model層的管理,他推薦的是Mantle。不過MJ這個更輕量級點,用着也更加簡單
(14).Masonry
Masonry是一個輕量級的AutoLayout佈局框架. 擁有自己的描述語法 採用更優雅的鏈式語法封裝自動佈局 簡潔明瞭 並具有高可讀性 而且同時支持 iOS 和 Max OS X。
(15).CorePlot
與蘋果公司的Core Animation, Core Data, and Cocoa Bindings的技術緊密結合,可以繪製柱狀圖,折線圖,餅圖等多種圖形,基本可以滿足OS X和iOS平臺上的大部分繪圖需求。
(16).XMPP
現在做個實時聊天,XMPP協議算是很成熟的方案了。XMPPFramework一個很不錯的選擇,可以直接和OpenFire服務器打交道。項目不大人手不多的話,可以看看這個。
(17).SSToolkit
SSToolkit算是一個不錯的工具包,提供各種比如編碼、加密、字符串處理等等東西,還提供了一些不錯的自定義控件,作者將他在App中實現的各種各樣的UI效果做成個代碼庫,方便其他人使用,並且文檔非常齊全。。
(18).GPUImage
GPUImage是一個基於GPU圖像和視頻處理的開源iOS框架,提供各種各樣的圖像處理濾鏡,並且支持照相機和攝像機的實時濾鏡; 基於GPU的圖像加速,因此可以加速對實時攝像頭視頻、電影以及image的濾鏡和其它效果處理,並且能夠自定義圖像濾鏡。另外, GPUImage支持ARC。
(19).RegexKitLite
在IOS應用中,經常要輸入數據,然輸入數據,就要校驗數據的合法性,這是我們很自然的聯想到web應用中的正則表達式。然而Cocoa並未支持正則表達式。這是我們可以使用第三方工具(RegexKitLite)來實現正則表達式。
cocopods
CocoaPod並不是iOS上的第三方庫 而是大名鼎鼎的第三方庫的管理工具,在CocoaPod沒有出現之前 第三方庫的管理是非常痛苦的 尤其是一些大型的庫(比如nimbus) 每次對庫進行更新 都可能會非常的痛苦CocoaPod的出現解決了這些問題 ,以Framework的方式引入第三方庫,極大的節約了集成的時間 而且通吃Objective-C和Swift(Swift上的Cathatage我沒有實際用過 但是它的那種集成方式還是比CocoaPod麻煩點)對於一個語言的流行伴隨着的就是第三方庫的豐富,相應的也會出現依賴庫管理的工具。cocoapods之於ObjC,就像maven/gradle 之於java、gem之於ruby那樣,cocoapods基本上是創建在在github社區上的,開源並且社區活躍。
關於第三方庫,同樣不推薦過多使用,如下:
1、消耗時間,一個開源庫,拿過來需要仔細考察代碼質量,確認是否足夠可靠。如果出現問題,需要仔細審查開源庫的內部實現。如果這些工作太消耗時間,還不如自己實現。
2、可維護性差。一旦遇到系統升級、API更換,第三方庫不能確保不出問題。當出問題後也難以找到人來維護。如果跟進第三方庫的改變,仍然容易出現新問題。