AFNetworking3.0学习笔记[更新中]

9th,August,2016

概述

github地址
Github是这样介绍的:A delightful networking framework for iOS, OS X, watchOS, and tvOS。也就是说这是一款非常友好的第三方库,且适用于iOS,OS X,watchOS和tvOS平台。模块化结构,丰富的API,一款非常优秀的网络。
AFNetworking3.x的认识: 就是基于NSURLSession进行高度封装,给开发者提供更为友好的接口。
查看资料发现AFNetworking2.0与3.0区别还是蛮大的,iOS9.0中已经弃用NSURLConnection。因而AFNetworking3.0中没有对NSURLConnection的支持,而是基于NSURLSession进行封装。(ps: AFNetworking2.0则是基于NSURLConnection与NSOperation开发) 如果需从AFNetworking2.0迁移到3.0可以查看Github:AFNetworking 3.0 Migration Guide

AFNetworking目录结构
1. AFHTTPSessionManager // 基于HTTP协议的会话管理器,继承AFURLSessionManager
2. AFNetworking
3. AFNetworkReachabilityManager // 网络可达性
4. AFSecurityPolicy // 安全性
5. AFURLRequestSerialization // 请求数据序列化
6. AFURLResponseSerialization // 响应数据序列化
7. AFURLSessionManager// 会话管理器,核心类

架构理解

这里写图片描述
from Draveness

苹果原生网络解决方案

在分析AFNetworking之前,先总结下苹果原生的网络解决方案。2003年跟着Safari一起推出的网络API:NSURLConnection,之后苹果重构了NSURLConnection,在2013年iOS7引入NSURLSession取代NSURLConnection,2015年iOS9弃用NSURLConnection。

NSURLConnection

从2003年开始,这套使用了十来年的API,虽然因代码简洁性一直被诟病。但在可扩展性与可组合性等方面表现的还是非常优秀的。NSURLConnection不单单只NSURLConnection这个组件,而是指一套构成URL加载系统的相互关联的组件:NSURLConnection,NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage(证书存储)。
这里写图片描述

NSURLSession

同NSURLConnection,NSURLSession也是一组相互关联的组件:除了大部分与NSURLConnection相同的组件。NSURLSession类也是做了比较大的调整。NSURLConnection被调整为由NSURLSession,NSURLSessionConfiguration,以及NSURLSessionTask系列(包括NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask以及iOS9推出的NSURLStreamTask)。
NSURLSession基本结构

缓存策略

cachePolicy:
1、NSURLRequestUseProtocolCachePolicy 协议缓存,根据 response 中的 Cache-Control 字段判断缓存是否有效,如果缓存有效则使用缓存数据否则重新从服务器请求
2、NSURLRequestReloadIgnoringLocalCacheData 不使用缓存,直接请求新数据
3、NSURLRequestReloadIgnoringCacheData 等同于 NSURLRequestReloadIgnoringLocalCacheData
4、NSURLRequestReturnCacheDataElseLoad 直接使用缓存数据不管是否有效,没有缓存则重新请求
5、NSURLRequestReturnCacheDataDontLoad 直接使用缓存数据不管是否有效,没有缓存数据则失败

会话

NSURLSession 支持进程三种会话:
1、defaultSessionConfiguration:进程内会话(默认会话),用硬盘来缓存数据。
2、ephemeralSessionConfiguration:临时的进程内会话(内存),不会将 cookie、缓存储存到本地,只会放到内存中,当应用程序退出后数据也会消。
3、backgroundSessionConfiguration:后台会话,相比默认会话,该会话会在后台开启一个线程进行网络数据处理。

对比

苹果重构后的NSURLSession对开发者还是相对友好,也很简洁。如果没有特别依赖第三方库(AFNetworking)提供的功能,出于不需要依赖任何第三方库的考虑(依赖第三方库的成本还是有的),推荐使用原生API。

开始看源码啦

AFHTTPSessionManager

[[AFHTTPSessionManager alloc] initWithBaseURL:[[NSURL alloc] initWithString: TEST_URL]]

先看看调用栈,

// 从Draveness的github源码分析复制过来的
- [AFHTTPSessionManager initWithBaseURL:]
    - [AFHTTPSessionManager initWithBaseURL:sessionConfiguration:]
        - [AFURLSessionManager initWithSessionConfiguration:]
            - [NSURLSession sessionWithConfiguration:delegate:delegateQueue:]
            - [AFJSONResponseSerializer serializer] // 负责序列化响应
            - [AFSecurityPolicy defaultPolicy] // 负责身份认证
            - [AFNetworkReachabilityManager sharedManager] // 查看网络连接情况
        - [AFHTTPRequestSerializer serializer] // 负责序列化请求
        - [AFJSONResponseSerializer serializer] // 负责序列化响应

初始化都做了哪些工作:
1. session会话配置初始化 // AFHTTPSessionManager
2. 序列化响应初始化 // AFRequestSerializer
3. 身份认证初始化,保证安全性 // AFSecurityPolicy

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值