##从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格式的数据了。
可以看到,整个使用还是很方便的。我们可以根据自己的需求配置不同设置。