美文网首页
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