一、系统提供的类和作用:
1.NSURLSessionConfiguration类
其中NSURLSessionConfiguration用于配置会话的属性,可以通过该类配置会话的工作模式
2.NSURLSession类第一种方式是使用静态的sharedSession方法,该类使用共享的会话,该会话使用全局的Cache,Cookie和证书。
第二种方式是通过sessionWithConfiguration:方法创建对象,也就是创建对应配置的会话,与NSURLSessionConfiguration合作使用。
第三种方式是通过sessionWithConfiguration:delegate:delegateQueue方法创建对象,二三两种方式可以创建一个新会话并定制其会话类型。该方式中指定了session的委托和委托所处的队列。当不再需要连接时,可以调用Session的invalidateAndCancel直接关闭,或者调用finishTasksAndInvalidate等待当前Task结束后关闭。这时Delegate会收到URLSession:didBecomeInvalidWithError:这个事件。Delegate收到这个事件之后会被解引用。
3.NSURLSessionTask类
NSURLSessionTask是一个抽象子类,它有三个子类:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。这三个类封装了现代应用程序的三个基本网络任务:获取数据,比如JSON或XML,以及上传和下载文件。
4.NSURLSessionDelegate和NSURLSessionTaskDelegate协议
在协议的方法中可以完成各种各样的回调动作,如身份验证、完成任务后的动作、错误处理和后台任务完成的动作等。委托方法指定在NSURLSession中一定数量的字节传输使用int64_t类型的参数。
二、AFNetworking
实际上只是对 NSURLSession
高度地封装, 提供一些简单易用的 API 方便我们在 iOS 开发中发出网络请求并在其上更快地构建网络层组件并提供合理的接口.
AFURLSessionManager
绝对可以称得上是 AFNetworking 的核心。
- 负责创建和管理
NSURLSession
- 管理
NSURLSessionTask
- 实现
NSURLSessionDelegate
等协议中的代理方法 - 使用
AFURLSessionManagerTaskDelegate
管理进度 - 使用
_AFURLSessionTaskSwizzling
调剂方法 - 引入
AFSecurityPolicy
保证请求的安全 - 引入
AFNetworkReachabilityManager
监控网络状态
小结
AFURLSessionManager
是对NSURLSession
的封装- 它通过
- [AFURLSessionManager dataTaskWithRequest:completionHandler:]
等接口创建NSURLSessionDataTask
的实例 - 持有一个字典
mutableTaskDelegatesKeyedByTaskIdentifier
管理这些 data task 实例 - 引入
AFURLSessionManagerTaskDelegate
来对传入的uploadProgressBlock
downloadProgressBlock
completionHandler
在合适的时间进行调用 - 实现了全部的代理方法来提供 block 接口
- 通过方法调剂在 data task 状态改变时,发出通知
来源:
http://draveness.me/afnetworking1/
http://draveness.me/afnetworking2/