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:简单易用,维护和使用者少.

时间: 2024-12-15 11:23:03

AFN总结的相关文章

AFN的简单二次封装

可用于登陆,注册,修改密码,获得手机验证码. 首先导入AFN第三方库 NetWorkTool.h // NetWorkTool.h // 网络请求 // // Created by 丁云飞 on 15/11/8. // Copyright © 2015年 DLS. All rights reserved. // #import <Foundation/Foundation.h> #import "AFNetworking.h" @protocol netWorkToolDe

AFN的使用(待整理)

待整理 一.文件下载 1.创建下载 //1.创建会话管理者 AFHTTPSessionManager *manager =[AFHTTPSessionManager manager]; NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"]; NSURLRequest *request = [NSURLRequest requestWithURL:u

ios开发网络学习AFN框架的使用一:get和post请求

#import "ViewController.h" #import "AFNetworking.h" @interface ViewController () @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self post]; } -(void)get { //1.创建会

iOS项目相关@AFN&amp;SDWeb的二次封装

一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m .h定义了HTTP常用的四种GET POST PUT DELETE 请求 一般分别用做增删减查 定义前预处理,请求成功处理,请求失败处理的block 及带多参数w的方法声明 .m设置请求类型跟响应类型,监听网络是否有网络,如果没有,弹出网络异常的警示框 2. UIImageView+WebCache.h及

[AFN]AFNetworking错误总结

1. 错误打印  code=-1016 filed: text/html 错误原因:AFN默认不能解析请求回来的text/html数据 解决办法: AFN3.0的请看这里 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/html", nil]]

AFN框架基本使用

+ 8.1AFN内部结构 AFN结构体    - NSURLConnection        + AFURLConnectionOperation        + AFHTTPRequestOperation        + AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)            * 属性                * baseURL :AFN建议开发者针对 AFHTTPRequestOperationManager 自定义个一

iOS开发——网络编程OC篇&amp;(十二)AFN详解

AFN详解 众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题. 一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在更新. AFNetworking的出现:MAC/iOS设计的一套网络

IOS开发使用NSURLConnection、NSURLSession、AFN、ASI四种方式实现HTTP请求

概括:HTTP请求可以使用NSURLConnection.NSURLSession.AFN.ASI等方式实现,其中又包括了get.post两种请求方式和同步.异步两种程序执行方式. NSURLConnection 1 get方式的同步请求 /** *  get同步请求 */ -(void) getSynch{ // 获取URL NSURL *url = [[NSURL alloc] initWithString:@"http://localhost:8070/MJServer/login?use

解决AFN不支持 &quot;text/html&quot; 的数据的问题

使用AFN若遇到这个错误 Request failed: unacceptable content-type: text/html 如图所示: 解决方法: 本文介绍两种方法, 第一种方法较好, 第二种存在风险, 特此说明,请勿使用第二种!!!! 1.第一种方法: 在懒加载AFHTTPSessionManager 对象时, 告诉AFN,支持接受 text/xml 的数据,代码如下: 1 - (AFHTTPSessionManager *)mgr 2 { 3 if (_mgr == nil) { 4