AFNetworking (3.1.0) 源码解析 <二>
这次讲解AFHTTPSessionManager类,按照顺序还是先看.h文件,注释中写到AFHTTPSessionManager是AFURLSessionManager的子类,并且带有方便的HTTP请求方法。当一个baseURL被提供,通过相对路径可以进行'get'/'post'/'put'/'patch'/'delete'五种不同的请求。

baseURL用于构建请求,在方法中的相对路径,比如方法requestWithMethod:URLString:parameters:和get,post这些遍历方法。
当我们在进行进一步封装的时候,可以将baseURL写成你自己的HTTP请求原始地址,比如
+ (NSURL *)baseURL {
return [NSURL URLWithString:kBaseURLString];
}
在对baseURL进行拼接的时候,也需要注意一下几点,防止出现请求URL出现问题
NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"];
[NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo
[NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz
[NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo
[NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo
[NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/
[NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/
以上这些在头文件注释中都有说明。

这两个属性分别是请求与响应序列。
下面看.m实现文件
可以看到有四个init初始化方法

以上进行了初始化,看.h文件时,可以发现第二个初始化方法多了一个NS_DESIGNATED_INITIALIZER
NS_DESIGNATED_INITIALIZER的作用是什么呢?
指定的构造器通过发送初始化消息到父类来保证object被完全初始化,指定构造器有以下几个规则:
1.指定构造器必须调用父类的指定构造器
2.任何一个便利构造器必须调用最终指向指定构造器的其他构造器
3.具有指定构造器的类必须实现父类的所有指定构造器
在.h中还有一个比较常见的DEPRECATED_ATTRIBUTE
DEPRECATED_ATTRIBUTE这个的字面意思就是这个API不建议开发者再使用了,再使用时,会出现编译警告
比如之前的get post等方法再次使用的时候就会报警告。
下面该介绍POST、GET、PUT、PATCH、DELETE方法
这些方法传参基本都是大同小异
URLString表示请求的URL,parameters表示客户端请求内容的存储器(一般进行post请求时,参数为json串或者字典),progress表示请求的进度,constructingBodyWithBlock里面只有一个formData用来拼接到HTTP的请求体,success表示请求成功后的block回调,failure表示请求失败的block回调
那么这几个请求有什么区别呢?
1、POST请求是向服务端发送数据的,用来更新资源信息,它可以改变数据的种类等资源
2、GET请求是向服务端发起请求数据,用来获取或查询资源信息
3、PUT请求和POST请求很像,都是发送数据的,但是PUT请求不能改变数据的种类等资源,它只能修改内容
4、DELETE请求就是用来删除某个资源的
5、PATCH请求和PUT请求一样,也是用来进行数据更新的,它是HTTP verb推荐用于更新的
在实际开发过程中,我们使用POST和GET请求的频率是最高的
在请求实现的部分,都是调用了-[dataTaskWithHTTPMethod:URLString:parameters:uploadProgress:downloadProgress:success:failure]方法创建NSURLSessionDataTask对象
传参的内容基本都是和上一层方法一样,method指的就是请求的类型

dataTask任务调用父类的方法,具体过程可以参照上一篇http://www.cnblogs.com/qiutangfengmian/p/5647377.html
如有转载,请注明出处
参考资料:http://zeeyang.com/2016/03/15/AFNetWorking-two/
AFNetworking (3.1.0) 源码解析 <二>的更多相关文章
- AFNetworking (3.1.0) 源码解析 <三>
今天要介绍的是Reachability文件夹下的AFNetworkReachabilityManager类.通过字面意思我们就可以知道AFNetworkReachabilityManager是用来监测 ...
- AFNetworking2.0源码解析<三>
本篇说说安全相关的AFSecurityPolicy模块,AFSecurityPolicy用于验证HTTPS请求的证书,先来看看HTTPS的原理和证书相关的几个问题. HTTPS HTTPS连接建立过程 ...
- AFNetworking (3.1.0) 源码解析 <六>
这次继续介绍文件夹Serialization下的类AFURLResponseSerialization.这次介绍就不拆分了,整体来看一下.h和.m文件. 协议AFURLResponseSerializ ...
- AFNetworking (3.1.0) 源码解析 <五>
这次主要开始讲解一下文件夹Serialization下的类AFURLRequestSerialization. AFURLRequestSerialization类遵守`AFURLRequestSer ...
- AFNetworking (3.1.0) 源码解析 <一>
首先说一下AFNetworking的github地址:GitHub - AFNetworking/AFNetworking: A delightful networking framework for ...
- AFNetworking (3.1.0) 源码解析 <四>
这次主要看一下文件夹Security中的类AFSecurityPolicy----安全策略类. AFSecurityPolicy主要的作用是验证HTTPS请求证书的有效性,在iOS9之后,默认不能发送 ...
- solr&lucene3.6.0源码解析(三)
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...
- Heritrix 3.1.0 源码解析(三十七)
今天有兴趣重新看了一下heritrix3.1.0系统里面的线程池源码,heritrix系统没有采用java的cocurrency包里面的并发框架,而是采用了线程组ThreadGroup类来实现线程池的 ...
- solr&lucene3.6.0源码解析(四)
本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本 ...
随机推荐
- require.js的使用的坑!
require.js的使用心德: 都是自我的理解所得: first:为什么使用? 1,web开发js的占用比例越来越大,引入的插件也越来越多,维护困难,一个一个的script的写要废 2,模块开发的需 ...
- fastjson反序列化
package cn.jsonlu.passguard.utils; import com.alibaba.fastjson.JSON; import java.lang.reflect.Type; ...
- Linq101-Miscellaneous
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Miscell ...
- Python的基本配置
Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结 ...
- (转)PHP中extract()函数的妙用
近日在看一个牛人的代码时,看到一个非常好用的函数:extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具,比方说,可以很方便的提取$_ ...
- 更改tabBarItem图片的问题
代码: UIImage *normal = [[UIImage imageNamed:@"tabbar_home_default"] imageWithRenderingMode: ...
- thinkphp 邮件发送
最近项目上要求,要做个邮件发送的功能,因为用到的框架是ThinkPHP,于是就自己整理一下. 引入class.phpmailer.php,大家可以去这个链接去下载: http://pan.baidu. ...
- Linux 4.1内核编译报告
编译环境 Arch Linux on VirtualBox 下载内核 https://www.kernel.org/ 下载的内核压缩包,此时的最新内核版本为4.1: 解压包 # tar -xvJf l ...
- 在iframe里调用parent.func()引出的js函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
有个document里定义了一个函数func(),同时在document里嵌入了一个iframe,在这个iframe里调用父窗口的方法:parent.func(),本来我以为这个函数的运行环境是在这个 ...
- yum 搭建lnmp环境详细步骤
1.关闭防火墙[root@CentOS ~]# chkconfig iptables off 2.关闭selinuxvi /etc/sysconfig/selinux//将SELINUX=enforc ...