设为首页 加入收藏

TOP

AFN(一)
2017-10-13 10:28:52 】 浏览:8311
Tags:AFN

AFN

1 AFN 的概念原理

 AFN 的基础是 NSURL,AFN 的直接操作对象 AFHTTPClient是一个实现了 NSCoding 和 NSCopying协议的NSObject 的子类. AFHTTPClient是一个封装了一系列操作方法的工具类,处理请求的操作类一系列单独的,基于 NSOperation 封装的, AFURLConnectionOperation的子类.AFN 的 demo 中通过静态方法,使用 dispatic_once()方法创建 AFHTTPClient 共享实例.在创建 AFHTTPClient 中,创建了 operatioQueue并设置了一系列默认的参数值.在 getPath—parameters—successs—failure 方法中创建了 NSURLRequest, 并根据该请求创建了 NSOpreation,并加入在初始化方法中的 NSOprarationQueue 中.(注:以上操作都在主队列中完成)

需要说明的是, AFN2.0是对 NSURLConnection , NSURLSession,HTTPS网络安全请求以及网络连接管理的封装,但是到 AFN3.0的时候添加了回调并删除了 NSURLConnection 的封装,这是因为NSURLSession 可以完全代替 NSURLConnection 方法,并且具有以下特点:

  • 支持后台运行的网络任务
  •    暂停、停止、重启网络任务,不需要自己封装NSOperation
  •    支持断点续传,异步下载
  •    支持上传,异步上传
  •    获取下载、上传的进度

2 AFN 的使用

2.1 AFN 的直接使用

> 实例化网络请求管理类

  • AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  • > 选择请求方法发送请求

    NSString *urlString = @"http://127.0.0.1/resources/vedios.xml";//url

   [manager GET:urlString parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {

                        // 这里可以获得请求的进度信息

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

                       // 成功的回调,这里就得到了数据,JSON数据会自动解析

                        // 如果是XML,HTML或者其它数据,需要选择不同的解析器

      }    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        // 失败的回调

    }];

2.2 AFN 的封装

    由于 AFN 只是一个框架,为避免由于 AFN 出现一个重大的 BUG 或者其他的原因,而造成的重大损失,我们一般讲 AFN 和网络请求分离开.

    实现步骤

> 创建一个类继承自 AFN(假如在使用中只用到HTTP 那我们可以让这个类继承自AFHTTTPSessionManager)

> 在这个类中提供一个类方法,用于创建这个类的对象(可以用单例实现)

> 创建一个对象方法,用于进行网络请求,提供参数,可以进行 POST GET HEAD等

2.3 AFN 与其他框架

> AFN 框架是一款简单易用的框架,有人维护,使用量大

> ASIHTTPRequst :ASI 的底层是基于纯 C 语言的 CFNetworking, 功能非常的强大,但是已经停止更新

> MKNetWork: 简单易用,但使用者少.

三者的对比

 

2.4 AFN 和 ASI 的对比

 ASI 简介

            ASI的直接操作对象是ASIHTTPRequest,是一个实现了NSCopying协议的NSOperation子类,在initialize和initWithURL:方法中初始化相关属性并设置一系列请求相关参数默认值.此外,ASIHTTPRequest还提供了一系列的实例方法用来配置请求对象.

1> 底层实现

  • Ø AFN是基于 OC 的 NSURLConnection 和 NSURLSession
  • Ø ASI 是基于 C的 CFNetWork 框架
  • Ø ASI 的执行性能高于 AFN

2>对服务器返回数据的处理

  • Ø ASI 没有提供腿服务器返回数据的处理,返回的直接是 data/string
  • Ø AFN 提供了多种处理数据的方式, JSON(默认),XML和其他数据处理

3>监听过程

  • Ø AFN 监听请求结果 successs(成功block回调)和 failure(失败block回调).
  • Ø ASI 提供了三套方案,可以监听整个请求过程(包括:开始,进程,结果:成功和失败)

成为代理à遵守协议à实现协议中的方法

成为代理à不遵守协议à自定义协议方法

设置 block

4> 下载和上传中的使用

  • Ø AFN 下载小文件和上传单文件,不能用于监听(上传和下载),也不能断点续传.
  • Ø ASI 可以用来监听上传和下载,可以断点续传,可以下载比较大的文件.

5>ASI 是其他优点

  • Ø 控制圈圈要不要在下载过程中转圈
  • Ø 可以轻松设置请求之间的依赖(每个请求都是一个NSOperation对象)
  • Ø 可以统
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇UIApplication基本介绍 下一篇数据解析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目