##从3.0开始
一转眼,AF已经更新到了3.0版本。目前cocoapods上的最新版本是3.0 beta1。在3.0的版本里面,AF全面地使用NSURLSession代替了NSURLConnection。之前花了一些时间学习NSURLSession,在这里的学习终于派上了用场。在这里主要学习3.0版本的使用。希望在项目中能够顺利地过度到AFNetwoking 3.0版本。此外,随着Objective-c慢慢被Swift替代,AFNetworking 3.0可能是最后一个大版本更新。本文会一直随着AN的更新继续更新,也是一个不断学习的过程。
##结构
在3.0时代,AFN精简了结构,全面使用了NSURLSession。

beta1里面只剩下了当前几个Manager。
AFHTTPSessionManager是AFURLSessionManager的子类。
##AFURLSessionManager
AFURLSessionManager实现了以下几种NSURLSession的代理方法
NSURLSessionDelegate
URLSession:didBecomeInvalidWithError:URLSession:didReceiveChallenge:completionHandler:URLSessionDidFinishEventsForBackgroundURLSession:
NSURLSessionTaskDelegate
URLSession:willPerformHTTPRedirection:newRequest:completionHandler:URLSession:task:didReceiveChallenge:completionHandler:URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:URLSession:task:didCompleteWithError:
NSURLSessionDataDelegate
URLSession:dataTask:didReceiveResponse:completionHandler:URLSession:dataTask:didBecomeDownloadTask:URLSession:dataTask:didReceiveData:URLSession:dataTask:willCacheResponse:completionHandler:
NSURLSessionDownloadDelegate
URLSession:downloadTask:didFinishDownloadingToURL:URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:
###成员
####属性
在AFURLSessionManager中,主要的三个属性如下

session实现了会话,operationQueue是一个操作队列。responseSerializer是实现了AFURLResponseSerialization协议的一个对象。
Manager中还包括了安全协议的对象和连通性的对象。这两个类将在后面谈到。

下面是Task的内容,包含与当前Session中

回调块队列,包括了在主队列和私有队列的两个部分

####方法
初始化方法

创建一个NSURLSessionDataTask数据性任务

创建`NSURLSessionUploadTask 上传任务


创建NSURLSessionDownloadTask 下载任务


获得一个特定任务的progress进度



Session Delegate Callbacks 设置会话代理回调


Task Delegate Callbacks 设置任务代理回调
当任务需要一个新的请求体发送给服务器的时候。
当HTTP请求回调有重定向的的话设置这个Block
当一个请求需要特别的鉴权的时候设置这个challenge
设置一个block去追踪上传进度

设置一个block当任务完成后执行
####Setting Data Task Delegate Callbacks 设置数据任务代理的回调
设置一个在数据任务获得response的时候回调block

设置一个block当数据任务变成下载的任务的时候执行

设置一个block当数据任务获得到数据的时候
设置一个block绝对是否缓存数据任务

####Download Task Delegate Callbacks 下载任务代理回调
设置block当下载任务完成下载后

设置block去追踪下载任务进度情况

设置block当下载任务执行/恢复的时候 执行

头文件的内容基本就是以上的了。可以看到整个AF的体系非常清晰完整,没有多余的东西,头文件只暴露了应该暴露的东西,值得我们去学习。
##使用的例子
###使用AFURLSessionManager
从源码中可以看到,AFURLSessionManager实现了
1 | NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NSSecureCoding, NSCopying |
首先需要设置url和NSURLConfirguration
这里是使用百度API商店的公开API
然后初始化Manager
设置ResponseSerializer
初始化request
对request进行相关设置
根据request生成对应的NSURLSessionTask。
执行任务
来看看执行后的信息

这里由于使用的AFHTTPResponseSerializer(API的问题,仅仅支持text/plain)所以在获取的数据后,我们自己要json序列化。如果是设计好的API,直接使用AFJSONRequestSerializer就可以在回调中获取到json格式的数据了。
可以看到,整个使用还是很方便的。我们可以根据自己的需求配置不同设置。