AFN原理

作者: dxin_101 | 来源:发表于2018-04-20 14:34 被阅读0次

在这个有着激烈竞争的社会中,我们必须时刻准备着,在网上我看了很多关于AFN的帖子,大致有了些理解,我们的理解从模块到架构组成。

AFNetWorking是基于NSURLSession,在生成配置的时候有三种配置选择

+ (NSURLSessionConfiguration *)defaultSessionConfiguration;  

//默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁盘缓存的持久化策略,使用用户keychain中保存的证书进行认证授权。

+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration;  

//瞬时会话模式(ephemeral):该模式不使用磁盘保存任何数据。所有和会话相关的caches,证书,cookies等都被保存在RAM中,因此当程序使会话无效,这些缓存的数据就会被自动清空。

+ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier;  

//后台会话模式(background):该模式在后台完成上传和下载,在创建Configuration对象的时候需要提供一个NSString类型的ID用于标识完成工作的后台会话。

也就是说default同时实现了内存缓存和硬盘缓存,ephemeral实现了内存缓存,对于图片下载我们当然选择default。我们还可以对缓存的大小进行设置,只需要对NSURLCache进行初始化就可以了

也可以单独对NSURLSession的configuration进行设置,在AFNetWorking中对于图片网络请求设置了20M的内存缓存和150M的硬盘缓存:

+ (NSURLCache *)defaultURLCache {

   return [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024

                                        diskCapacity:150 * 1024 * 1024

                                            diskPath:@"com.alamofire.imagedownloader"];

}

分为5大模块

分别由NSURLSession,Security,Reachability,Serialization,UIKit五部分组成

NSURLSession:网络通信模块(核心模块) 对应 AFNetworking中的 AFURLSessionManager和对HTTP协议进行特化处理的AFHTTPSessionManager,AFHTTPSessionManager是继承于AFURLSessionmanager

以下三个是被AFURLSessionManager所引用;

Security:网络通讯安全策略模块  对应 AFSecurityPolicy

Reachability:网络状态监听模块 对应AFNetworkReachabilityManager

Serialization:网络通信信息序列化、反序列化模块 对应 AFURLResponseSerialization

UIKit:对于IOSUIKit的扩展库------这个UIKIt库中有网络下载图片的框架等;

下面是详细介绍。

1:AFURLConnectionOperation

可以说是AFN最基础的类。继承自NSOperation类,将网络请求依附到一个operation上。从而让我们能够有效的控制并观察一个网络请求的创建、进行、取消、完成、暂停恢复、异常等问题及状态。【第三部分详细分析实现以及功能】

2:AFHTTPRequestOperation

HTTP或HTTPS协议请求的AFURLConnectionOperation的子类。它封装的可接受状态码和内容的类型,判定一个请求结果是成功或失败。

实际上对系统的HTTP网络请求增加了几个HTTP需要用到的参数。

3:AFHTTPRequestOperationManager

这个类是AFN类库的核心类。它封装完成了一种通用的模式,可以帮助我们轻松友好的完成请求的创建、响应的系列化,网络状态的监控以及安全策略以及每一个请求operation的管理(operation的相互依赖或状态改变)。

【第三部分详细分析实现以及功能】

4:AFURLSessionManager

iOS7 之后,苹果增加了新的网络请求类--NSURLSession。AFN官方推荐iOS 7 或者 Mac OS X 10.9以上的,最好使用该类发起网络请求,取代AFHTTPRequestOperationManager。不过基于目前国内app大都最低适配的 iOS6,该类的用途还不是太广泛。NSURLSession的说明或者使用不再赘述。自行查看API文档。以后有时间再加上该类的使用。

5: AFURLSessionManager

继承自AFURLSessionManager。类似于1和2的关系。也是方便HTTP以及https请求的使用,增加了一些接口,方便调用。

6:AFNetworkReachabilityManager

网络的连通状态监控以及网络的类型。实际是将苹果官方提供的Reachability的类名和通知名更换了一下,防止和系统提供的类的通知名以及类名的冲突。

7:AFSecurityPolicy

这个我不太懂,安全策略的类。一般貌似用不到,有需要自行google。。

8:AFURLRequestSerialization

①:符合这个协议的对象用于处理请求,它将请求参数转换为 query string 或是 entity body 的形式,并设置必要的 header。

②:构建multipart请求。

9:AFURLResponseSerialization

遵循AFURLResponseSerialization协议的对象,用于验证、序列化响应及相关数据,转换为有用的形式,比如 JSON 对象、图像、甚至基于mantle的模型对象。

具体实现,参考

https://blog.csdn.net/ygh5123687/article/details/70243703

多线程的应用:https://www.cnblogs.com/nbhhcty66/p/7010694.html

相关文章

  • iOS面试(3)-AFN和SDwebImage底层实现

    一、AFN底层原理 二、SDwebImage底层原理

  • AFN原理

    在这个有着激烈竞争的社会中,我们必须时刻准备着,在网上我看了很多关于AFN的帖子,大致有了些理解,我们的理解从模块...

  • AFN底层原理分析

    AFN底层原理分析 AFNetworking主要是对NSURLSession和NSURLCollection的封装...

  • iOS AFN底层原理

    AFN底层原理分析 AFNetworking主要是对NSURLSession和NSURLCollection(io...

  • iOS AFN实现原理

    AFNetworking是封装的NSURLSession的网络请求 AFNetworking由五个模块组成: 分别...

  • 待学习知识点

    NSURLSession五大类, AFN源码, //assign修饰对象报错原理, //https和http比较,...

  • 面试清单

    1. 多线程(基础) 2. Runtime(基础) 3. Runloop(基础) 4. AFN原理(基础) 5. ...

  • iOS面试题-常问题

    未完,待更新 一、必备题 1、AFN 原理 链接:AFNetworking源码——基本架构 - 简书 2、SDWe...

  • AFN2.X/3.X网络请求原理

    AFURLConnectionOperation原理:1:首先我们可以看到他创建了一个单例线程,用来处理AFN发起...

  • AFN原理及常用方法

    AFN的六大模块NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核...

网友评论

    本文标题:AFN原理

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