iOS总结-网络框架-AFNetworking源码解析(一)

AF分为5个功能模块:

  网络通信模块(AFHTTPSessionManager/AFURLSessionManager)

  网络状态监听模块(AFURLResponseSerialization)

  网络通信安全策略模块(AFSecurityPolicy)

  网络通信信息序列化/反序列模块(AFURLRequestSerialization/AFURLResponseSerialization)

  其核心当然是网络通信模块AFURLSessionManager

  

AFHTTPSessionManager继承于AFURLSessionManager.在初始化的时候- (instancetype)initWithBaseURL:(NSURL *)url  sessionConfiguration:(NSURLSessionConfiguration *)configuration的时候直接调用父类AFURLSessionManager的initWithSessionConfiguration的方法.

AFHTTPSessionManager的初始化

接下来是AFURLSessionManager的初始化

NSURLSession的有关api,我之前已经总结过了,这里是加了锁

至此AFURLSessionManager初始化完成了,接下来是网络请求.

举个GET请求的例子 从AFHTTPSessionManager开始

接着在AFURLRequestSerialization里面来获取NSMutableURLRequest的请求,请求类型get,post,put等

AFHTTPRequestSerializerObservedKeyPaths()这个c函数返回一数组,里面包含了NSMutableURLRequest的各种属性

在AFURLRequestSerialization里面的init初始化mutableObservedChangedKeyPaths这个NSSet方法,并添加观察者利用kVO模式进行监听.

KVO触发方法:

接下来是将传入的parameters进行编码,并添加到request

其实解码里面最重要的就是AFQueryStringPairsFromKeyAndValue()方法,通过判断value的类型(array,dic,set),不断递归自己,最后返回一数组

其中AFQueryStringPair这个对象的实现

如果GET/HEAD/DELETE,是把参数拼接到url后面的,而POST/PUT是把query拼接到http body中.

至此生成了一个request.

参考:https://www.jianshu.com/p/856f0e26279d

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值