AFNetworking 2.0指北

AFNetworking 2.0 來了

SEP 30TH, 2013html

前幾天 Mattt 發佈了 AFNetworking 2.0,個人一個最大感慨就是,他怎麼那麼高產?

 

關於 Mattt

Mattt 是一位很是活躍的 iOS 開發大牛,從 AFNetworking 1.0 開始 follow 他。當時從他 AFNetworking 和 TTTAttributedLabel 等開源代碼中學到了不少。他如今是 Heroku 的 Mobile Lead。html5

我一直以爲一個團隊要想爲開發者提供優秀的服務,這個團隊自己應該足夠 hacker 足夠酷,好比 Github,這羣人以及他們所作的事真的是很是帥。 Heroku 也不錯,他們的首席架構師就是 Ruby 之父松本行弘,他們讓 Web 開發變得如此的輕鬆。ios

我以爲 Mattt 確實是個 hacker,而且是個很是具備開源精神的 hacker。他的不少項目我都以爲很是有趣,這裏列出一些。更多信息關注他的Github帳號(@mattt)和Twitter帳戶(@mattt)。git

  • asciiwwdc – searchable full-text transcripts of WWDC sessions
  • afnetworking 2.0 – a delightful networking library for iOS and Mac OS X
  • nshipster – a journal of the overlooked bits in Objective-C and Cocoa
  • helios – an extensible open-source mobile backend framework
  • nomad – world-class command line utilities for iOS development
  • rocket – a hybrid approach to real-time cloud applications

關於 AFNetworking

AFNetworking 是一個用於 iOS 和 OS X 開發的網絡請求框架,始於 2011 年 5月,那時候 Mattt 還在 Gowalla (Foursquare的競爭對手,後被Facebook收購)工做。基於蘋果的一個Demo MVCNetworking,Mattt 開始了 AFNetworking。當時 ASIHTTPRequest 還很流行,但很快更多的程序員發現 AFNetwoking 是更爲現代的解決方案,因此它逐漸開始流行。如今,AFNetworking 有 9000+ stars,2300+ forks,是 Objective-C 開源社區最火的框架。程序員

重點介紹 AFNetworking 2.0

AFNetworking 在易用性和擴展性之間平衡得很是好,但這並非說它沒有改進的空間。AFNetworking 2.0 的目標是調整原始設計中的一些奇怪的地方,同時添增強大的新架構,幫助新一代的應用程序變得更爲強大。github

1.目的

兼容 NSURLSession

在 iOS7 中 NSURLConnection 被 NSURLSession 取代,但 NSURLConnection 並無被 deprecated,在一段時間內依然可用。不過,NSURLSession 纔是將來,它解決了 NSURLConnection 的不少缺點。有人可能會說有 NSURLSession 還須要 AFNetworking 麼,兩者確實有重疊的地方,但 AFNetworking 做爲一個更上層的抽象類,能提供的更多。2.0 兼容並擴展了 NSURLSession,鋪平其中艱難的路線,最大限度的提升了易用性。安全

模塊化

AFNetworking 1.0 被批評的一個地方是,它有點臃腫。其實 1.0 在類的層次上很具備模塊化,但文件封裝的不夠方便,沒辦法單獨分離出某個功能模塊。隨着時間的推移,特別是像 AFHTTPClient 這樣的類,會變得很臃腫(建立請求,序列化請求參數,響應和解析,建立和管理各類操做,監控網絡的可用性等都堆在一塊兒)。在 2.0 中,你能夠只挑選你須要的模塊,能夠經過 CocoaPods subspecs 使用,很方便。bash

實時

2.0 遵循 Rocket 技術,Rocket 是在現有的 REST 服務器之上,經過一些 Web 標準(如Server-Sent EventsJSON Patch),實現實時的數據更新,詳情參考前文列表中的連接。服務器

2. 實現

NSURLConnection (iOS 6 & 7)
  • AFURLConnectionOperation – 它繼承於 NSOperation,負責管理 NSURLConnection,實現它的 delegate 方法。
  • AFHTTPRequestOperation – 它繼承於 AFURLConnectionOperation,專門用於建立 HTTP 請求。2.0 的主要區別就是能夠直接使用它,而不用再繼承它,緣由將會在下面的 Serialization 處解釋。
  • AFHTTPRequestOperationManager – 封裝 HTTP 請求的常見方式,GET / POST / PUT / DELETE / PATCH……
NSURLSession (iOS 7)
  • AFURLSessionManager – 建立和管理 NSURLSession 對象,以及此對象的數據和下載/上傳等任務,實現對象和任務的代理方法。NSURLSession 的 API 自己有一些侷限,AFURLSessionManager 能使其變得更好用。
  • AFHTTPSessionManager – 它繼承於 AFURLSessionManager,封裝了 HTTP 請求的常見方式,GET / POST / PUT / DELETE / PATCH……網絡

    總 的來講:爲了支持最新的 NSURLSession 接口,同時兼容舊的 NSURLConnection,2.0 的核心組件將「網絡請求」和「任務處理」分離。 AFHTTPRequestOperationManager 和 AFHTTPSessionManager 提供類似的功能,切換很方便,因此從 iOS 6 移植到 iOS 7 會很容易。以前綁在 AFHTTPClient 裏的 serialization、security 和 reachability 模型都被分離了出來,基於 NSURLSession 和 NSURLConnection 的 API 均可複用這些模型。

序列化(Serialization)

2.0 架構的一個突破就是,請求和解析的可序列化。序列化的靈活性容許在網絡層添加更多的商業邏輯,自定義更方便。<AFURLRequestSerializer> 和 <AFURLResponseSerializer> 這兩個協議,讓你在 1.0 中的一些抱怨不復存在。

安全

AFNetworking 支持 SSL pinning。這對涉及敏感數據的 App 很重要。

  • AFSecurityPolicy – 這個類經過特定證書和公共密鑰評估連接的安全性和可信任度。在你的 App bundle 中添加服務器證書有助於防止「中間人攻擊」。
可達性(Reachability)

另外一個從 AFHTTPClient 中分離的功能是網絡的可達性。如今你能夠單獨使用它,或者做爲 AFHTTPRequestOperationManager / AFHTTPSessionManager 的一個屬性。

  • AFNetworkReachabilityManager – 負責監控當前的網絡可達性,當網絡的可達性發生改變時,提供相應的 callback 和通知。
實時
  • AFEventSource – 用 Objective-C 實現的 EventSource DOM API。客戶端和服務器創建一個長連接,服務器會把新的 Event 實時推給客戶端。客戶端收到的信息格式是JSON Patch,而後 JSON Patch 被轉化爲 AFJSONPatchOperation 對象。示例代碼參考:
  • NSURL *URL = [NSURL URLWithString:@"http://example.com"]; AFHTTPSessionManager *manager = [[AFHTTPClient alloc] initWithBaseURL:URL]; [manager GET:@"/resources" parameters:nil success:^(NSHTTPURLResponse *response, id responseObject) {  [resources addObjectsFromArray:responseObject[@"resources"]];   [manager SUBSCRIBE:@"/resources" usingBlock:^(NSArray *operations, NSError *error) {  for (AFJSONPatchOperation *operation in operations) {  switch (operation.type) {  case AFJSONAddOperationType:  [resources addObject:operation.value];  break;  default:  break;  }  }  } error:nil]; } failure:nil]; 

 

 

UIKit 擴展

 

2.0 的中全部 UIKit 擴展都被分離出來並進行了加強。

 

  • AFNetworkActivityIndicatorManager: 新增自動開始或結束狀態欄上的網絡指示器。
  • UIImageView+AFNetworking: 新增顯示圖片前剪裁或者加濾鏡的功能。
  • UIButton+AFNetworking (新增): 相似 UIImageView+AFNetworking,按鈕的背景圖從線上下載。
  • UIActivityIndicatorView+AFNetworking (新增): 根據網絡請求的狀態自動開始或結束。
  • UIProgressView+AFNetworking (新增): 自動跟蹤某個請求的上傳下載的進度。
  • UIWebView+AFNetworking (新增): 支持網絡請求的進度和內容轉換。

 

3. 使用

 

在 CocoaPods 中使用 AFNetworking 2.0:

platform :ios, '7.0' pod "AFNetworking", "2.0.0" 
相關文章
相關標籤/搜索