- AFNetWorking的介绍
a) 这是一个适用于苹果平台开发的网络库,基于Foundation URL Loading System上进行了一套封装,并且提供了丰富且优美的API接口给使用者使用
b) 从github上面的star数量(2.7W)来说,就知道它是又多么的受欢迎,可以说做苹果app开发,对于URL Session的编程是不可缺少的
c) - AFNetWorking的版本说明
a) AFN2.0的使用要求:iOS6,Xcode5以上,基于NSURLConnection和NSURLSession构建。
b) AFN3.0的使用要求:iOS7以及Xcode7以上,删除了已废弃的的基于NSURLConnection的API,完全基于NSURLSession构建,降低了以后的维护负担,同时NSURLConnection的API从Xcode7开始已经被苹果公司废弃,建议都基于NSURLSession进行网络操作。 - AFNetworkReachabilityManager
a) 网络的连通状态监控以及网络的类型。实际是将苹果官方提供的Reachability的类名和通知名更换了一下,防止和系统提供的类的通知名以及类名的冲突。状态有:《未知、无连接、WWAN(蜂窝网)、WIFI》
b) 一般写到AppDelegate的入口函数,startMonitoring,检测到的网络状态经过block返回 - 安全策略:AFN支持SSL绑定的HTTPS安全链接通信。也可以使用无效的证书https,使用方法:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // 允许无效证书 - AFNetWorking的封装
其实AFN的使用非常简单方便,但是为了app解除对于afn的依赖,对于网络请求还是进行了简单的封装。一般封装的网络功能工具类,使用单例模式,主要有POST请求和GET请求,和afn一样,使用block返回数据和状态。还要一些其他的功能,比如上传文件和缓存。关于app中各模块的网络请求,就基于封装的网络工具类创建各模块的分类,进行统一管理网络请求。 - AFNetworking FAQ
a) dispatch_queue_t使用@property时提示必须为strong,以为iOS6开始dispatch_queue_t被当做对象处理。
b) ANF利用NSURLCache提供缓存功能,只要NSURLRequest对象具有正确的高速缓存策略,并且服务器响应包含高速缓存控制头,那么响应将自动缓存以供后后续请求使用
c) OAuth可以使用AFOAuth1Client和AFOAuth2Client - 常见的序列号和反序列化的错误
a) AFN支持接收的数据类型有限,但是我们可以自己在响应器里添加类型,是一个数据类型文本集合
b) AFN默认成功的回调是把返回的数据当成JSON来解析,这里我们可以修改响应器为默认的,自己解析
c) AFN默认向服务器发送的是普通的二进制数据,当我们需要发送JSON数据时,可以修改请求器为JSON类型的
- AFNetwoking的原理
使用AFHTTPSessionManager进行网络请求,其实现最终是调用了父类AFURLSessionManager,而AFURLSessionManager内部声明NSURLSession的属性,并声明了NSURLSession的代理,最终的网络操作还是由NSURLSession来实现。AFNetworking对数据的解析方式默认是json解析,默认的代理操作队列最大的并发操作数为1是让所有请求的发起和等待网络响应均在同一条线程中执行,而不用为每一个请求都新建一条线程,这样节约了很多资源。在响应到达后,会执行一系列的代理回调,执行数据的解析,返回数据,然后使用通知中心将请求完成的消息传递到主线程去。