导语:

众所周知,AFNetworking是目前IOS开发中非常受欢迎的第三方网络通信类库,同时AFNetworking对苹果官方NSURLConnection和NSURLSession进行了封装,使用起来可以说是简单的"令人发指".

官网地址:

AFNetworking有关请求与响应的信息

 请求:(序列化)
AFURLRequestSerialization
AFHTTPRequestSerializer(默认) 传输的就是二进制
AFJSONRequestSerializer 传输入的二进制是一个JSON格式的二进制 ,只有NSArray,NSDictionay
AFPropertyListRequestSerializer 传输的到时候是一个plist,这个不玩意儿不用,因为他不通用 响应:(反序列化)
<AFURLResponseSerialization>
AFHTTPResponseSerializer //返回的就一个纯洁的二进制
AFJSONResponseSerializer(默认) 返回的是一个JSON格式的二进制,并且AFN帮我们自动序列化成了字典或是数组
AFXMLParserResponseSerializer XMLParser
AFXMLDocumentResponseSerializer (Mac OS X) 不适合我们的iOS
AFPropertyListResponseSerializer plist
AFImageResponseSerializer //国片
AFCompoundResponseSerializer //混合

使用AFNetworking

  • GET方法:
//1.首先创建一个管理者
AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
//2.发送请求
//在使用AFN的时候,直接传递我们url的字符串就可以了
//AFN在反序列化的时候,默认是帮我们按照JSON的格式去解析
[manager GET:@"http://localhost/test.json" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { //第一个参数 operation 操作
//第二个参数 responseObject
NSLog(@"%@---%@",responseObject,[responseObject class]);
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
  • POST方法:
 //1.创建一个基于NSURLConnection的管理
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //2.发送我们的POST请求
//用户名密码
NSDictionary *param = @{@"username":@"admin",@"password":@"123"};
//登陆到得网址
[manager POST:@"http://localhost/login.php" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSLog(@"post result====%@---%@",responseObject,[responseObject class]);
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
  • AFNetworking之搭配webView使用

注意:因为默认情况下AFNetworking的响应解析方式都是按照JOSN解析,所以我们需要修改AFNetworking的解析方式,但是为了以后使用方便,我们不在AFNetworking基础上修改,我们添加一个类继承自AFHTTPSessionManager然后创建一个单例,这样以后AFNetworking更新,我们的代码也不会因此受到影响.

首先创建NetWorkTool类,并创建单例方法

#import "AFHTTPSessionManager.h"

@interface NetWorkTool : AFHTTPSessionManager

//单例
+ (instancetype)sharedNetWorkTool; @end

实现单例方法

#import "NetWorkTool.h"

@implementation NetWorkTool

static NetWorkTool *_instance;
+ (instancetype)sharedNetWorkTool{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[NetWorkTool alloc] initWithBaseURL:nil]; _instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil]; //默认情况下的响应解析方式,就是不管服务器给我们返回的是什么,都按照JSON去解析
//将默认的JSON序列化方式,改成我们最普通的二进制
_instance.responseSerializer = [AFHTTPResponseSerializer serializer];
}); return _instance;
}
@end

在控制器中拖入一个UIWebView试图,通过连线方式连接到控制器中


#import "ViewController.h"
#import "NetWorkTool.h" @interface ViewController ()
//WebView
@property (weak, nonatomic) IBOutlet UIWebView *webView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self loadWebView];
} - (void)loadWebView{
//1.获取我们NetWorkTool的单例
NetWorkTool *netWorkTool = [NetWorkTool sharedNetWorkTool]; //2.发送GET请求 //html
__weak typeof(self) weakSelf = self;
[netWorkTool GET:@"http://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"result===%@----%@",responseObject,[NSThread currentThread]); //再将我们返回的二进制,转成我们字符串,反序列化
NSString *html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; //在主线程更新UI
[weakSelf.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"http://www.baidu.com"]];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error===%@",[error localizedDescription]);
}];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
  • AFNetworking之联网检测

    联网检测对应状态

    AFNetworkReachabilityStatusUnknown = -1, //未知的状态

    AFNetworkReachabilityStatusNotReachable = 0, //不能联网

    AFNetworkReachabilityStatusReachableViaWWAN = 1, //流量

    AFNetworkReachabilityStatusReachableViaWiFi = 2, //wifi
//点击屏幕的时候开始检测
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%ld",status);
}]; [[AFNetworkReachabilityManager sharedManager] startMonitoring]; }
  • AFNetworking之上传文件
//点击屏幕的时候上传文件
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//获取基于NSURLSession的管理器
AFHTTPSessionManager *manager=[AFHTTPSessionManager manager]; //上传文件
NSDictionary *param=@{@"status":@"this is test"};
[manager POST:@"http://localhost/post/upload-m.php" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//获取文件1
NSURL *url1=[[NSBundle mainBundle]URLForResource:@"01.jpg" withExtension:nil];
[formData appendPartWithFileURL:url1 name:@"userfile[]" fileName:@"01.jpg" mimeType:@"image/png" error:NULL];
//获取文件2
NSURL *url2=[[NSBundle mainBundle]URLForResource:@"02.jpg" withExtension:nil];
NSData *data2=[NSData dataWithContentsOfURL:url2];
//[formData appendPartWithFileData:data2 name:@"userfile[]" fileName:@"02.jpg" mimeType:@"image/png"];
//application/octet-stream通用格式
[formData appendPartWithFileData:data2 name:@"userfile[]" fileName:@"02.jpg" mimeType:@"application/octet-stream"]; } success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"responseObject--->%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error---->%@",error);
}]; }

我的简书: http://www.jianshu.com/users/666b623d4bf1/latest_articles

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

  1. AFNetworking 用法详解

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

  2. AFNetworking 内部详解

    AFNetworking 是一个适用于IOS 和 Mac OSX 两个平台的网络库,他是在Foundation URL Loading System  基础上进行的一套封装 ,并提供了丰富的API接口 ...

  3. AFNetworking 与 UIKit+AFNetworking 详解

    资料来源 : http://github.ibireme.com/github/list/ios GitHub : 链接地址 简介 : A delightful iOS and OS X networ ...

  4. AFNetworking 3.0 使用详解 和 源码解析实现原理

    AFN原理&& AFN如何使用RunLoop来实现的: 让你介绍一下AFN源码的理解,首先要说说封装里面主要做了那些重要的事情,有那些重要的类(XY题) 一.AFN的实现步骤: NSS ...

  5. iOS开发——网络编程Swift篇&Alamofire详解

    Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...

  6. ios新特征 ARC详解

    IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报   目录(?)[+]   关闭工程的ARC(Automatic Reference Co ...

  7. Podfile文件用法详解

    https://www.jianshu.com/p/b8b889610b7e 2018.01.09 15:51* 字数 2343 阅读 6263评论 3喜欢 34 前言 iOS开发会经常用到cocoa ...

  8. CocoaPods详解之(二)----进阶篇

    CocoaPods详解之----进阶篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/19178709 转载请注明出处 ...

  9. CocoaPods详解之(一)----使用篇

    CocoaPods详解之----使用篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 一.什么是Coc ...

随机推荐

  1. codeforces C. k-Tree

    思路:dp[i][j]表示和为i,最大值为j的方案数. #include <cstdio> #include <cstring> #include <algorithm& ...

  2. VC版本的MakeObjectInstance把WNDPROC映射到类的成员函数

    这段时间用VC封装Windows类库,没有MakeObjectInstance处理窗口消息确实不爽,又不想使用MFC的消息映射,这玩意的效率和美观只能呵呵. 至于MakeObjectInstance是 ...

  3. java学习之负数的进制

    在上一篇内容当中说明了什么是进制,进制存在的原因以及形式,接下来说一下一个比较特殊的进制计算,就是负数的在计算机当中的表示.举个个例子来说 6的二进制表示是什么? 0000-0000-0000-000 ...

  4. BZOJ 1029 [JSOI2007]建筑抢修 已更新

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 2748  Solved: 1213[Submit][Statu ...

  5. 【Angular】排序

    Correct way to integrate Jquery plugins in Angular.js gaurav123337/AngularOtherJqueryPluginDemo 超强的拖 ...

  6. 实战weblogic集群之创建domain,AdminServer

    在weblogic安装完后,接下来就可以创建domain,AdminSever了. 第1步: $ cd /app/sinova/Oracle/wlserver_10./common/bin $ ./c ...

  7. poj1042

    题目大意:去捕鱼 约翰去参加一个垂钓旅行,他有h小时可以使用在该地区有n (2 <= n <= 25) 个湖泊可以沿着一个单一的路到达,约翰从湖泊1开始,但是它可以在任何湖泊结束他如果想, ...

  8. 用过coreData或者sqlite吗?读写是分线程的吗?

    文/natewang(简书作者)原文链接:http://www.jianshu.com/p/cb8dc61b12fa著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 如果不是要求特别高, ...

  9. log4jdbc与logback集合打印日志过多的解决

    在项目中使用了log4jdbc,可以很方便的把sql的参数也打印出来,便于问题调试.比如原始sql: select * from t_order where order_id = ? : 经过log4 ...

  10. 利用MyEclipse配置S2SH三大框架篇-Spring配置

    1.配置完Struts2后,然后配置Spring 2.单击“MyEclipse->Project Capabilities->Add Spring Capabilities” 3.选择Sp ...