AFN小结(简单的封装)
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:简单易用,维护和使用者少.
AFN小结(简单的封装)的更多相关文章
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 对bootstrap modal的简单扩展封装
对bootstrap modal的简单扩展封装 参考自:http://www.muzilei.com/archives/677 注:原文不支持bootstrap新版本,并且居中等存在问题 此段时间 ...
- 一个用python简单的封装了aria2的jsonrpc中adduri的脚本
aria2是一个十分牛逼的下载神器,有时候项目需要一个很牛逼的下载中间件的话,aria2是一个不错的选择.其中支持jsonrpc和websocket的特性尤其诱人.但是python用起来还是有点不爽, ...
- 最新 AFNetworking 3.0 简单实用封装
AFNetworking 3.0 的到来使我们开发者又方便了许多,话不多说,直接上代码. 1.首先 引入框架AFNetworking框架 GitHub下载地址:https://github.com/A ...
- React+Echarts简单的封装套路
今天我们来介绍一下React中,对Echarts的一个简单的封装. 首先在我们的React项目中,想使用Echart包,首先需要先安装它,安装代码如下,任选一个就可以 cnpm install ech ...
- [iOS 多线程 & 网络 - 4.0] - AFN框架简单使用
A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC B. ...
- Autofac Container 的简单的封装重构
为了使用方便,对Autofac container的简单封装,记录如下,备以后用或分享给大家,欢迎讨论! using Autofac; using Autofac.Core.Lifetime; usi ...
- html --- ajax --- javascript --- 简单的封装
Ajax的简单封装 Ajax的全称是AsynchronousJavaScriptAndXML 如有疑问请参考:http://zh.wikipedia.org/zh-cn/AJAX 以及传智播客的视频教 ...
- andriod开发,简单的封装网络请求并监听返回.
一.为什么封装 因为android 4.0 以后的发送网络请求必须要放到异步线程中,而异步线程必须跟handle合作才能更新主线程中的UI,所以建议用一个类继承handler来异步处理网络请求. 二. ...
随机推荐
- [React Router v4] Conditionally Render a Route with the Switch Component
We often want to render a Route conditionally within our application. In React Router v4, the Route ...
- hdu 4865 dp
Peter's Hobby Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- MapKit
MapKit MapKit框架的使用 nMapKit框架使用前提 p导入框架 p p导入主头文件 #import <MapKit/MapKit.h> MapKit框架使用须知 pMapKi ...
- web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: The connection property 'zeroDateTimeBehavior' acceptable values are: 'CO
使用sqoop导入数据时报了如题的异常,异常的提示是 The connection property 'zeroDateTimeBehavior' acceptable values are: 'CO ...
- Yii2.0
Yii2.0基础框架 缘起 因为一个月的短暂停留,我在给朋友搞事情,所以Yii系列的文章耽搁了很长时间,现在又重拾当时的知识,给大伙好好撸下这一系列的博客 提起Yii,虽然是国外的开发者搞的,但是 ...
- Cordova 集成极光推送
1.申请极光推送账号,创建应用,配置包等信息,可以获得AppKey,用于添加Cordova插件,这部分暂不细讲,根据官网的提示操作就能完成. 2.命令窗口给cordova项目添加极光推送插件 cord ...
- 如何移除解决方案中的TFS版本控制
1.清除(删除)项目下的所有版本控制文件,这些文件有:*.vssscc,*.vspscc删除这些版本控制文件比较简单,搜索这些后缀的文件,删除即可. 2.修改项目的解决方案文件:*.sln (1).先 ...
- 你不从地址栏中增加曝光量所需的数据库ID方法
<p><span style="font-size: 18px;"></span></p> 当你想隐藏数据库id时,你能够使用 Ha ...
- LaTex 加粗(加黑)的方式
1. 基本 LaTeX技巧458:关于LaTeX数学字体加粗 $\mathbf $,会变为粗体,但也导致数学字母斜体形式的丢失: 使用 amsmath package 的 \boldmath 命令: ...