之前一直使用ASIHttpRequest 做网络请求 ,后来新公司用AFNetWorking ,经过一段时间学习总结一下二者的优缺点:

1.AFNetWorking的优缺点

优点:

1.维护和使用者比较多

2.对ARC支持

3.对Block的支持非常好

4.专门对异步请求的支持

5.支持基于URL 缓存

6.图片以及NSURLCache AFCache缓存使用

7.支持后台下载,缓存离线请求的支持(SDURLCache)

8.对JSON支持比较好

9.对实现的http请求比较容易

10.对HTTPS 的支持

缺点:

是基于Foundation框架的NSURLConnection对网络进行的封装,不是用的底层的CFNetwork进行的封装,扩展功能可能稍微少一些,

但是在http上的网络支持已经足够。

二.ASIHttpRequest

优点:

1.对网络底层CFNetwork支持

2.对代理支持设置比较方便

3.支持离线下载和基于URL的缓存

4.对HTTPS的支持

5.对http 请求方面的实现不是太好,会多写点代码

6.同步和异步的支持

用法:

1.首先将AFNetWorking(主要基于网络请求的方法) UIKit+AFNetworking(异步加载图片的方法)加入到工程  一般引用这两个包,不然会有提示错误 SystemConfiguration.framework、

MobileCoreServices.framework

2.在使用的地方  #import"AFHTTPRequestOperationManager"

#import"AFHTTPSessionManager"

AFHTTPOperationManager 的post有两个方法, 一个是普通的post ,另一个是可以上传图片

1.上传图片

AFHTPOperationMAnager*manager=[AFHTTPOperationManager manager];

manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObject:@"text/html"];

NSDictionary*parameters=@{@"参数1":@"value1",@"参数2":@"value2"....};

NSData*imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"],1.0);

[manager POST:@"替换成你要访问的地址"parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>formData){

[formData appendPartWithFileData:imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpep"];

} success:^(AFHTTPRequestOperation*operation,id responseObject){

NSLog(@"success:%@",responseObject);}

failure:^(AFHTTPRequestOperation*operation,ESError*error){

NSLog(@"Error:%@",error);}]

这个方法可以上传图片,如果不用上传图片,可以吧这句话去掉

[formData appendPartWithFileData:imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpep"];

上传多张图片

-(void)uploadPictures{

NSString*domainStr=@"http://192.168.1.69/xffcol/index.php/api/";

AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager manager];

manager.responseSerializar=[AFHTTPResponseSerializar serializer];

//如果还要上传其他的参数,参考上面的POST请求 ,创建一个可变字典,存入需要提交的参数内容, 作为paramater的参数

[manager POST:domainStr parameters:nil consructingBodyWithBlock:^(id<AFMultipartFormData>formData)

{

//_imageArray 就是图片数组,我的_imageArray里面存的都是图片的data,下面可以直接取出来使用,如果存的是image,

//将image转换成data的方法如下:NSData*imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"],1.0);

if (_imageArray.count>0){

for(int i=0;i<_imageArray.count;i++){

NSData*data=_imageArray[i]

//上传的参数名

NSString*name=[NSString stringWithFormat:@"%d",i]

//上传的filename

NSString*fileName=[NSString stringWithFormat:@"%@.png",name];

[formData appendPartWithFileData:data

name:name

filename:fileName

miimeType:@"image/png"];

}

}

success:^(AFHTTPRequestOperation)operation,id responseObject){

//关闭风火轮

[UIApplication sharedApplication].netorkActivityIndicatorVisiable=NO;

//JSON解析

NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

NSLog(----------------);

}failure:^(AFHTTPRequestOperation*operation,NSError*error{

//解析失败隐藏通风火轮(可以打印error.userInfo查看错误信息)

[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;

}];

}

2.普通的post

AFHTPRequestOperationManger*manager=[AFHTTPOperation manager];

manager.responseSerialize.acceptableContentTypes=[NSSetsetWithObject:@"text/html"];

NSDictionary*parameters=@{@"参数1":@"value1",@"参数2":@"value2"....};

[manager POST:@"替换成需要访问的地址"parameters:

success:^(AFHTTPRequestOperation*operation,id responseObject){

NSLog(@"success:%@",responseObject);}

failure:^(AFHTTPRequestOperation*operation,ESError*error){

NSLog(@"Error:%@",error);}]

二.GET请求网络数据方式

-(void)obtainData

{

//启动系统风火轮

[UIApplication shareApplication].networkActicityIndicatorVisible=YES;

//前面写服务器给的域名,后面拼接上需要提交的参数,假如参数是key=1

NSString*domainStr=@"http://192.168.1.69/xffcol/index.php/Api/key/1/";

AFHTTPOperationManager*manager=[AFHTTPOperationManager manager];

manager.responseSerializer=[AFHTTPResponseSerializer serializer];

//以GET的形式提交,只需要将上面的请求地址给GET做参数就可以

[manager GET:domainStr parameters:nil success:^(AFHTTPRequestOperation*operation, id responseObject)

{

//隐藏系统风火轮

[UIApplication sharedApplication].networkActicityIndicatorVisible=NO;

//json解析

NSDictionary *resultDic=[NSJsonSerialization JSONOBjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

NSLog(@"---获取到的json格式的字典---%@",resultDic);

}failure:^(AFHTTPRequestOperation*operation,NSError*error{

//解析失败隐藏通风火轮(可以打印error.userInfo查看错误信息)

[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;

})]

}

AFNetworking 用法详解的更多相关文章

  1. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  2. @RequestMapping 用法详解之地址映射

    @RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...

  3. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  4. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  5. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  6. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  7. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  8. systemctl命令用法详解

    systemctl命令用法详解系统环境:Fedora 16binpath:/bin/systemctlpackage:systemd-units systemctl enable httpd.serv ...

  9. CSS3的@keyframes用法详解:

    CSS3的@keyframes用法详解:此属性与animation属性是密切相关的,关于animation属性可以参阅CSS3的animation属性用法详解一章节. 一.基本知识:keyframes ...

随机推荐

  1. 令人眼前一亮的下拉式终端 Tilda & Guake

    前言 老夫是 Linux 的老用户. 大一的时候某不方便透露姓名的校内组织给了一个 Fedora 13 的安装光盘,然后老夫学会了重装 Windows. 大二的时候知道了 Ubuntu ,开始在虚拟机 ...

  2. JVM 体系结构

    JVM 是一种抽象的计算机,基于堆栈架构,它有自己的指令集和内存管理,是 Java 跨平台的依据,JVM解释执行字节码,或将字节码编译成本地代码执行.Java 虚拟机体系结构如下: Class Fil ...

  3. JAVA: List用法

    1.List中可以添加任何对象,包括自己定义的新的类. class Person{.....}上面定义了一个Person类,下面看好如何使用ListPerson p1=new Person();Per ...

  4. Gridview 重建表头/单击单元格弹出对话框/改变单元格背景色

    整理工作~ 完整的代码在GitHub上, 路径: 项目背景:追踪某个issue,并且记录每天的状态. 要求:1.点击日期就能更改,并且用颜色标志不同的状态 2.增加按钮可关闭issue 3.布局要求日 ...

  5. yii2 Nav::widget() 和 Menu::widget()

    Nav::widget http://www.yiiframework.com/doc-2.0/yii-bootstrap-nav.html Menu::widget()  http://www.yi ...

  6. mybatis只能模糊查询英文不能查询中文

    解决方法:修改配置文件,最简单的完美修改方法,修改mysql的my.cnf文件中的字符集键值(注意配置的字段细节): 1.在[client]字段里加入default-character-set=utf ...

  7. ps-色彩饱和度的设计

    1-    图层区—复制背景图层            防止原图修改失败后无法还原 2-    选项区——选择—色彩范围              以色彩为标准来对图片进行选区 3-    点击图片上 ...

  8. 利用Register protocol实现网页调用桌面程序(类似迅雷、QQ等)

    前言 我们经常看到 tencent://.. thunder://     这两种开头的网址,往往觉得很奇怪,很想弄懂其中的原理,是如何实现的,我查找了相关的 资料,终于找到了,跟大家分享下. 原理篇 ...

  9. 说说JAVA之网络编程 - 爬虫

    首先总结一下学习过程中所需要的类: URL类 - openConnection() URLConnection类 - connection() getInputStream() BufferedRea ...

  10. media query(媒体查询)和media type(媒体类型)

    media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面.media query(媒体查询)是对media ...