AFNetworking 原码解析

1、AFURLConnectionOperation
AFURLConnectionOperation是AFNetworking最基础的类,集成NSOperation类,讲网络请求依附到operation上,从而能够有效控制并观察一个网络请求的创建,进行,取消,完成,暂停恢复,异常等问题或者状态。
2、AFHTTPRequestOperation
AFHTTPRequestOperation 是HTTP或者HTTPS协议请求的AFURLConnectionOperation的子类,封装的克接受状态码和内容的类型,判定一个请求结果的是成功还是失败。实际上对系统的HTTP网络请求增加了几个HTTP需要用到的参数。
3、AFHTTPRequestOperationManager
AFHTTPRequestOperationManager 类是AFN的核心类,封装完成了一种普通的模式,可以帮助我们轻松友好完成请求的创建,响应的序列化,网络状态的监控以及安全策略以及每一个请求Operation的管理。
4、AFURLSessionManager
AFURLSessionManager 是iOS7之后AFN 推出代替AFNRequestOperationManager。
5、AFURLSessionManager 继承AFURLSessionManager,也是方便HTTP以及HTTPS请求的使用,增加一系列的接口,方便调用。
6、AFNetworkingReachabilityManager
网络的连通状态以及网络的类型,检查网络连接情况。
7、AFSecurityPolicy
安全策略类,验证 HTTPS 请求的证书是否有效,如果APP中涉及到敏感信息及交易信息,一定要使用HTTPS请求的来保证请求的安全性,用户信息的安全性;封装证书的校验过程,让用户可以轻易的使用,出去了CA机构的验证,还支持SSL 方式的验证

     // .crt --->.cer
    // 证书 ---> 公钥  ---> 随机数 加密
    //  项目本地导入  ---> 谁安装谁就能获取到这个证书
    //  证书:proy.
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https" ofType:@"cer"];
    NSData   *data    = [NSData dataWithContentsOfFile:cerPath];
    NSSet    *cerSet  = [NSSet setWithObject:data];
    
    AFSecurityPolicy *security = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
    // 默认配置
    [AFSecurityPolicy defaultPolicy];
    security.allowInvalidCertificates = YES;
    security.validatesDomainName      = NO;
    
    NSString *urlstr = @"https://xxx.xxx.34.197:9000/users/abc";
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 不安全 -- 授权
    manager.securityPolicy        = security;
    [manager GET:urlstr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"success--%@",responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"fail--%@",error);
        
    }];

8、AFURLRequestSerialization

  1. 符合这个协议的对象处理请求,讲请求参数装换为了query String 或者entity body的形式,并设置必要的header。
    2.构建multipart请求。
    9、AFURLResponseSerialization
    遵循AFURLResponseSerialization协议的对象,用于验证,序列化,响应及相关数据,转换为有用的形式,比如JSON对象,图象,或者mantle模型对象。
    请求过程:
    AFURLConnectionOperation 将Operation和URLConnection结合到一起,利用operation可以监听到状态以及可以建立相互的依赖关系特征,实现了对于一个NSURLConnect对象的完美控制,并将请求的结果通过block返回;
    1.首先我们可以看到创建了一个单例线程,这个线程将会常驻内存,用来处理AFN发起的请求,线程也跟随一个Runloop,AFN将这个runloop的模式设置为NSDefaultRunloopMode,NSDefaultRunloopMode是无法检到connect的连接状态,这说明AFN没有在该线程处理connect完成后的UI刷新工作,而是讲数据抛给主线程,让主线程去做刷新工作。
    2.我们可以看到该类的通过接受请求的字符串,创建了URLRequest以及NSURLConnection对象,进行请求。
    3.实现文件多次使用到了锁,可以保证数据的安全性,当然也实现了几个数据的NSCoping协议,
    4.请求的创建,进行,取消,完成,暂停取消,异常问题的控制,暂停其实是将网络请求取消,但是由于实现NSCoping协议,数据保存了下来,下次请求的时候将已经下载的数据节点一起发送给服务器,告诉服务器这部分数据不需要下载了,服务器根据发送的数据节点返回节点给client端相应的数据即可,从而实现暂停和恢复,也就是断点续传。

总结:AFN 工作原理其实很简单;
1.首先有哪些类,分别负责哪些工作,就知其原理了
AFURLSessionManager 负责请求的管理;
AFURLConnectionOperation 负责请求的连接;
AFURLReachabilityManager 负责网络状态、网络连接的监控;
AFSecurityPolicy 主要负责在需要CA的校验时,进行CA证书的校验;
AFURLResponseSerialization 负责请求返回数据的序列化;
AFURLRequestSerialization 负责请求参数的序列化及设置请求头的设置;

你可能感兴趣的:(AFNetworking 原码解析)