AFN小结

1,AFN概念、原理

2,AFN的封装使用

3,AFN与其它框架对比

—————————————————————————————————

1 , AFN的概念原理:

AFN的基础是NSURL,AFN的直接操作对象AFHTTPClient是一个实现了NSCoding和NSCopying协议的NSObject子类。AFHTTPClient是一个封装了一系列操作方法的“工具类”,处理请求的操作类是一系列单独的,基于NSOperation封装的,AFURLConnectionOperation的子类。AFN的示例代码中通过一个静态方法,使用dispatch_once()的方式创建AFHTTPClient的共享实例,这也是官方建议的使用方法。在创建AFHTTPClient的初始化方法中,创建了OperationQueue并设置一系列参数默认值。在getPath:parameters:success:failure方法中创建NSURLRequest,以NSURLRequest对象实例作为参数,创建一个NSOperation,并加入在初始化发方中创建的NSOperationQueue。以上操作都是在主线程中完成的。

AFNetworking2.0是对 NSURLConnection,NSURLSession的封装

AFNetworking3.0删除了了对 NSURLConnection的封装内容

这是因为NSURLSession能够完全替代NSURLConnection,并且具有很多优点

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

————————————————————————————————

2 , AFN的使用及封装

2 . 1   AFN的直接调用

1. 实例化网络请求管理类.

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

2. 选择请求方法,发送网络请求.

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

[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代码与网络请求的代码隔离开,这样做的好处是,一旦AFN出现重大bug或者我们更换另外的第三方网络请求框架时,会比较简单和方便。可以想象,如果我们自己的项目中到处充斥的都是直接使用AFN网络请求,那么修改和维护代码将是多么的麻烦。

封装AFN只需要以下3步:

1, 新建一个类,继承自AFN,如果我们只用到HTTP,可以直接继承AFHTTPSessionManager

2, 在类中提供一个类方法,用于创建这个类的对象,可以使用单例模式

3, 在类中提供一个对象方法,用于进行网络请求,提供参数,可以进行GET、POST、HEAD等请求。

具体示例demo放在压缩包文件,可以下载查看。

————————————————————————————————-

3 , AFN与其它框架对比

* AFNetWorking:简单易用,提供了基本够用的常用功能,有人更新和维护,而且目前使用者很多 。其相关资料,文档,demo很多,很好找遇到问题好解决。

*ASIHttpRequest: ASI的底层基于纯C语言的CFNetwork框架,功能很强大,可惜作者已停止更新.

* MKNetWorkKit:简单易用,维护和使用者少.

 
 
链接: http://pan.baidu.com/s/1c7c6ia 密码: 3mmn

AFN小结(简单的封装)的更多相关文章

  1. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  2. 对bootstrap modal的简单扩展封装

    对bootstrap modal的简单扩展封装 参考自:http://www.muzilei.com/archives/677   注:原文不支持bootstrap新版本,并且居中等存在问题 此段时间 ...

  3. 一个用python简单的封装了aria2的jsonrpc中adduri的脚本

    aria2是一个十分牛逼的下载神器,有时候项目需要一个很牛逼的下载中间件的话,aria2是一个不错的选择.其中支持jsonrpc和websocket的特性尤其诱人.但是python用起来还是有点不爽, ...

  4. 最新 AFNetworking 3.0 简单实用封装

    AFNetworking 3.0 的到来使我们开发者又方便了许多,话不多说,直接上代码. 1.首先 引入框架AFNetworking框架 GitHub下载地址:https://github.com/A ...

  5. React+Echarts简单的封装套路

    今天我们来介绍一下React中,对Echarts的一个简单的封装. 首先在我们的React项目中,想使用Echart包,首先需要先安装它,安装代码如下,任选一个就可以 cnpm install ech ...

  6. [iOS 多线程 & 网络 - 4.0] - AFN框架简单使用

    A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC     B. ...

  7. Autofac Container 的简单的封装重构

    为了使用方便,对Autofac container的简单封装,记录如下,备以后用或分享给大家,欢迎讨论! using Autofac; using Autofac.Core.Lifetime; usi ...

  8. html --- ajax --- javascript --- 简单的封装

    Ajax的简单封装 Ajax的全称是AsynchronousJavaScriptAndXML 如有疑问请参考:http://zh.wikipedia.org/zh-cn/AJAX 以及传智播客的视频教 ...

  9. andriod开发,简单的封装网络请求并监听返回.

    一.为什么封装 因为android 4.0 以后的发送网络请求必须要放到异步线程中,而异步线程必须跟handle合作才能更新主线程中的UI,所以建议用一个类继承handler来异步处理网络请求. 二. ...

随机推荐

  1. Android 判断软键盘弹出并隐藏的简单完美解决方案

    最近项目中有一个编辑框,下面是个ListView.在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击.这样的体验效果很不好.于是便想在滑动或单击item时判 ...

  2. 一小时内破解16位强password

    password能够用来保护你的金融交易.你的社交网络站点,和其它貌似安全的在线站点的主机.人们常常说:"不要把字典里的单词用来做password.它们超级不安全". 但是,要是黑 ...

  3. 【codeforces 750F】New Year and Finding Roots

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. C++ 快速入门笔记:进阶编程

    C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...

  5. [Ramda] Pick and Omit Properties from Objects Using Ramda

    Sometimes you just need a subset of an object. In this lesson, we'll cover how you can accomplish th ...

  6. 一个完整的Erlang应用

    http://blog.chinaunix.net/uid-25876834-id-3308693.html 这里介绍构建一个完整的Erlang/OTP应用的例子,最后还给出了一个在实际生成环境中,如 ...

  7. [GeekBand] C++继承关系下虚函数内存分布

    本文参考文献:GeekBand课堂内容,授课老师:侯捷 :深度探索C++对象模型(侯捷译) :网络资料,如:http://blog.csdn.net/sanfengshou/article/detai ...

  8. redux相关学习资源

    很多学习资料,直接在SF.掘金搜索关键词redux源码等可以获得. redux参考版本3.6或3.7.2   redux-thunk看1.0.1 1.redux源码分析之四:compose函数    ...

  9. Linux下的正斜杠"/"和"\"的区别

    今天在检查root目录时发现有一个名为"\"的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开. [root@localhost ~] ...

  10. C#--动态操作DataTable

    C#动态操作DataTable(新增行.列.查询行.列等) 方法一:动态创建一个DataTable ,并为其添加数据 public void CreateTable()        {        ...