• AFNetworking (3.1.0) 源码解析 <二>


    这次讲解AFHTTPSessionManager类,按照顺序还是先看.h文件,注释中写到AFHTTPSessionManagerAFURLSessionManager的子类,并且带有方便的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/

  • 相关阅读:
    错误 com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value
    mysql数据库
    c程序语言设计
    第二十四天 注解 和 异常
    第二十三天 泛型
    第二十二天 集合
    php tostring用法
    thinkphp批量添加水印
    thinkphp fetchSql
    php钩子是什么意思
  • 原文地址:https://www.cnblogs.com/qiutangfengmian/p/5653380.html
Copyright © 2020-2023  润新知