美文网首页
AFNetworking 概述

AFNetworking 概述

作者: 梓华 | 来源:发表于2018-07-18 08:09 被阅读4次

    工程代码如下

    工程pod里代码1 工程pod里代码1 工程pod里代码2

    下载源码如下

    下载源码1 下载源码2

    网络通信:URLSession
    网络状态监听:Reachability
    网络通信安全:Security
    网络通信序列化:Serialization
    UIKit扩展部分:UIKit(以Category形式添加特性)

    彼此关系是:


    结构图
    AFNetworking的核心模块是通信URLSession那一块。在通信模块中有两个类,AFHTTPSessionManager和AFURLSessionManager。其中前者继承于后者,是对HTTP请求的封装。

    使用NSURLSession请求

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"https://github.com"]];
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                           completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                                               NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                               NSLog(@"%@", dataStr);
                                           }];
    [task resume];
    

    使用 NSURLSession 来进行 HTTP 请求并且获得数据,总共有五个步骤。

    1.实例化一个 NSURLRequest/NSMutableURLRequest。设置URL。
    2.通过sharedSession方法获取NSURLSession
    3.在session上调用dataTaskWithRequest:completionHandler方法返回一个 NSURLSessionDataTask
    4.向data task发送消息resume开始执行这个任务
    5.在completionHandler 中将数据编码 返回字符串

    使用AF请求

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[[NSURL alloc] initWithString:@"xxx"]];
    [manager GET:@"xxx" parameters:nil progress:nil
        success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
          // Success
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
          // error
    }];
    

    这里2个步骤
    1.创建一个AFHTTPSessionManager对象
    2.使用这个对象调用含有block的请求方法

    AFHTTPSessionManager 类图如下


    AFHTTPSessionManager 类图

    初始化的调用栈

    - [AFHTTPSessionManager initWithBaseURL:]
        - [AFHTTPSessionManager initWithBaseURL:sessionConfiguration:]
            - [AFURLSessionManager initWithSessionConfiguration:]
                - [NSURLSession sessionWithConfiguration:delegate:delegateQueue:]
                - [AFJSONResponseSerializer serializer] // 负责序列化响应
                - [AFSecurityPolicy defaultPolicy] // 负责身份认证
                - [AFNetworkReachabilityManager sharedManager] // 查看网络连接情况
            - [AFHTTPRequestSerializer serializer] // 负责序列化请求
            - [AFJSONResponseSerializer serializer] // 负责序列化响应
    

    1.AFURLSessionManager 是 AFHTTPSessionManager 的父类
    2.AFURLSessionManager 负责生成 NSURLSession 的实例
    3.管理AFSecurityPolicy 和 AFNetworkReachabilityManager的实例。一个保证请求的安全。一个查看网络连接情况。
    4.AFJSONResponseSerializer的实例是用来序列化HTTP响应
    5.AFHTTPSessionManager 有着自己的 AFHTTPRequestSerializer和AFJSONResponseSerializer 来管理请求和响应的序列化,同时依赖父类提供的接口保证安全、监控网络状态,实现发出 HTTP 请求这一核心功能。

    GET方法调用栈

    - [AFHTTPSessionManager GET:parameters:process:success:failure:]
        - [AFHTTPSessionManager dataTaskWithHTTPMethod:parameters:uploadProgress:downloadProgress:success:failure:] // 返回 NSURLSessionDataTask #1
            - [AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:] // 返回 NSMutableURLRequest
            - [AFURLSessionManager dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:] // 返回 NSURLSessionDataTask #2
                - [NSURLSession dataTaskWithRequest:] // 返回 NSURLSessionDataTask #3
                - [AFURLSessionManager addDelegateForDataTask:uploadProgress:downloadProgress:completionHandler:]
                    - [AFURLSessionManagerTaskDelegate init]
                    - [AFURLSessionManager setDelegate:forTask:]
        - [NSURLSessionDataTask resume]
    

    1.这里主要就是调用dataTaskWithRequest返回task 然后task调用resume

    相关文章

      网友评论

          本文标题:AFNetworking 概述

          本文链接:https://www.haomeiwen.com/subject/mpcmpftx.html