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

    相关文章

      网友评论

        本文标题:AFN原理

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