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" 
相关文章
相关标签/搜索