AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。AFHTTPRequestOperationManager已经抛弃,所以需要对数据请求进行改动。

Get请求

 //使用代码
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
//成功
NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
//失败
}];
    • 当我们调用get函数之前,我们需要创建一个AFHTTPSessionManager,在之前我们使用的一般是AFHTTPRequestOperationManager.

       
    • 在调用get请求后,我们一般都不需要干什么了,因为那些繁琐复杂的网络通信都交给他去做了,他首先会调用AFNetworkReachabilityManager验证是否联网.
    • 然后参数序列化,用于网络请求.
    • 调用AFSecurityPolicy类,AFSecurityPolicy用于验证HTTPS请求的证书,简单来说建立连接.
    • 连接建立完成,证书验证成功,开始请求服务器.
    • 从服务器返回数据,解析服务器数据,将数据反序列化.
    • 我们得到data类型的数据,可以使用JSON解析直接解析成字典使用.弃用的类:
    •     AFURLConnectionOperation
      AFHTTPRequestOperation
      AFHTTPRequestOperationManager
    • 两者之间对比

      AFN2.0:

      NSURL *URL = [NSURL URLWithString:@""];
      NSURLRequest *request = [NSURLRequest requestWithURL:URL];
      AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
      op.responseSerializer = [AFJSONResponseSerializer serializer];
      [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSLog(@"JSON: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      NSLog(@"Error: %@", error);
      }];
      [[NSOperationQueue mainQueue] addOperation:op];

      AFN3.0:

    • - (void)GETUrl:(NSString *)url parameters:(NSDictionary *)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure
      {
      if (!_sessionGetManager) {
      _sessionGetManager = [AFHTTPSessionManager manager];
      //设置请求格式
      _sessionGetManager.responseSerializer = [AFJSONResponseSerializer serializer];;
      }
      // 设置请求超时时间
      // _sessionGetManager.requestSerializer.timeoutInterval = 10;
      //设置允许接受返回数据类型
      _sessionGetManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json",@"text/plain", @"text/javascript", nil];
      NSLog(@"%@",url);
      [_sessionGetManager GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
      success(responseObject);
      } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
      NSLog(@"********%@",error);
      // if (task.state == 2) {
      // return ;
      // }
      failure(error);
      }]; }
    • - (void)POSTUrl:(NSString *)url parameters:(NSDictionary *)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure
      {
      if (!_sessionPostManager) {
      _sessionPostManager = [AFHTTPSessionManager manager];
      //接收数据类型 --->JSON
      _sessionPostManager.responseSerializer = [AFJSONResponseSerializer serializer]; }
      //接收数据类型 --->JSON
      _sessionPostManager.responseSerializer = [AFJSONResponseSerializer serializer];
      //访问超时时间
      _sessionPostManager.requestSerializer.timeoutInterval = .f; _sessionPostManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"text/plain",nil];
      NSLog(@"url =%@",url); [_sessionPostManager POST:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
      success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
      NSLog(@"%@",error);
      failure(error);
      }]; }

      AFN3.0下载方法:

      /**
      * AFN3.0 下载
      */
      - (void)downLoad{ //1.创建管理者对象
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      //2.确定请求的URL地址
      NSURL *url = [NSURL URLWithString:@"" //如果报接受类型不一致请替换一致text/html或别的
      manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; ]; //3.创建请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //下载任务 NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { //打印下下载进度 WKNSLog(@"%lf",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { //下载地址 WKNSLog(@"默认下载地址:%@",targetPath); //设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象 NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]; return [NSURL URLWithString:filePath]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { //下载完成调用的方法
      WKNSLog(@"下载完成:");
      WKNSLog(@"%@--%@",response,filePath); }]; //开始启动任务
      [task resume]; }

      监测当前网络状态(网络监听)

      - (void)AFNetworkStatus{
      
          //1.创建网络监测者
      AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; /*枚举里面四个状态 分别对应 未知 无网络 数据 WiFi
      typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
      AFNetworkReachabilityStatusUnknown = -1, 未知
      AFNetworkReachabilityStatusNotReachable = 0, 无网络
      AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窝数据网络
      AFNetworkReachabilityStatusReachableViaWiFi = 2, WiFi
      };
      */ [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
      //这里是监测到网络改变的block 可以写成switch方便
      //在里面可以随便写事件
      switch (status) {
      case AFNetworkReachabilityStatusUnknown:
      WKNSLog(@"未知网络状态");
      break;
      case AFNetworkReachabilityStatusNotReachable:
      WKNSLog(@"无网络");
      break; case AFNetworkReachabilityStatusReachableViaWWAN:
      WKNSLog(@"蜂窝数据网"); break; case AFNetworkReachabilityStatusReachableViaWiFi:
      WKNSLog(@"WiFi网络"); break; default:
      break;
      } }] ;
      }

      AFN3.0 上传

    • /**
      * AFN 3.0 上传
      * 有两种方式
      * upLoad1 和 upLoad2
      */ //第一种方法是通过工程中的文件进行上传
      - (void)upLoad1{ //1。创建管理者对象
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.上传文件
      NSDictionary *dict = @{@"username":@""}; NSString *urlString = @"";
      [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
      //上传文件参数
      UIImage *iamge = [UIImage imageNamed:@"123.png"];
      NSData *data = UIImagePNGRepresentation(iamge);
      //这个就是参数
      [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"]; } progress:^(NSProgress * _Nonnull uploadProgress) { //打印下上传进度
      WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
      } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功
      WKNSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败
      WKNSLog(@"请求失败:%@",error);
      }]; } //第二种是通过URL来获取路径,进入沙盒或者系统相册等等
      - (void)upLoda2{
      //1.创建管理者对象
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      //2.上传文件
      NSDictionary *dict = @{@"username":@""}; NSString *urlString = @"";
      [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];
      } progress:^(NSProgress * _Nonnull uploadProgress) { //打印下上传进度
      WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
      } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功
      WKNSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败
      WKNSLog(@"请求失败:%@",error);
      }];
      }

      总结的也不一定全面,还需要各位同僚共同努力,如有什么疑问,请加我扣扣:1123231279

    • 最后附上Github地址:https://github.com/wy08/RequestModel

ios 对于AFNetworking3.0的基本使用的更多相关文章

  1. IOS 网络浅析-(十一 三方 AFNetworking3.0简介)

    AFNetworking3.0是目前最新的版本,本来打算介绍一下2.6,但是想想2.6名不久矣,就决定不介绍了,有兴趣的小伙伴可以上网查一查.下面我就开始进入正题了. 目前使用人数最多的第三方网络库, ...

  2. iOS 适配https(AFNetworking3.0为例)

    众所周知,苹果有言,从2017年开始,将屏蔽http的资源,强推https楼主正好近日将http转为https,给还没动手的朋友分享一二 1.准备证书 首先找后台要一个证书(SSL证书,一般你跟后台说 ...

  3. iOS开发--基于AFNetWorking3.0的图片缓存分析

    图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...

  4. AFNetworking3.0的基本使用方法

    前一段时间在做项目的时候发现AFNetworking3.0已经被大众所接受,所以以后肯定会有很多程序猿朋友必须了解和转移至3.0了,这是我这段时间使用和学习总结出来的一些常用的知识点,希望对大家有用. ...

  5. AFNetworking3.0为何弃用了NSURLConnection

    http://blog.csdn.net/qq_34101611/article/details/51698524 上篇博客说到AFNetworking3.0只提供了NSURLSession的支持.其 ...

  6. 网络婚礼之AFNetWorking3.0

    目前使用人数最多的第三方网络库,没有之一.从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他 ...

  7. iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载

    官方建议AFN的使用方法   0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目   •2. 或使用Cocopod 导入AFNetworking3.0+   •3.   ...

  8. ShareSDK for iOS 2.9.0已经公布

    ShareSDK for iOS v2.9.0已经公布,本次更新内容包含: 1.修复Facebook获取用户信息报错问题 2.修复Instagram在iPad上显示分享菜单错误问题,须要指定菜单容器. ...

  9. AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示

    对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...

随机推荐

  1. python_12 模块

    在python中,一个.py文件就称之为一个模块(module) 好处:提高代码的可维护性 模块分为三种:1.python标准库   2.第三方库     3.应用程序自定义模块 import的作用: ...

  2. Java并发编程随笔

    死锁:两个线程互相等待对方释放锁才可以继续运行. 避免死锁的常见方法: 1.避免一个线程同时获取多个锁 2.避免一个线程在锁内同时占用多个资源,尽量保证一个锁只占用一个资源 3.尝试使用定时锁,使用l ...

  3. SQL中NVL函数

    空值判断函数 1.NVL(表达式A,表达式B) 如果表达式A为空值,NVL返回值为表达式B的值,否则返回表达式A的值.该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的值可以是数字型. ...

  4. Linux安装OPENJDK配置环境变量

    # yum  search  openjdk  回车 找到open开发者环境jdk版本复制它的名字 安装java-1.8.0-openjdk-headless.x86_64 yum install j ...

  5. card布局解决复杂操作的布局问题

    一直不是很待见直接使用card布局,直到对于一些稍微复杂点的业务, 通过border布局和弹窗体的方式解决特别费劲之后,才想起了card布局, 发现card布局真是一个很好的解决办法. 那个使用起来很 ...

  6. node.js异步编程的几种模式

    Node.js异步编程的几种模式 以读取文件为例: 1.callback function const fs = require('fs'); //callback function fs.readF ...

  7. [原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C0000006 异常问题

    //如果软件在网络磁盘中或移动磁盘中运行时需要利用下面这句命令来解决 exception C0000006 异常问题 {$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FRO ...

  8. vue中v-cloak解决刷新或者加载出现闪烁(显示变量)

    在使用vue绑定数据的时候,渲染页面时会出现变量闪烁,例如 <div class="#app"> <p>{{value.name}}</p> & ...

  9. python1.返回一个字符串中出现次数第二多的单词 2.字符串中可能有英文单词、标点、空格 3.字符串中的英文字符全部是小写

    import re from collections import Counter def second_count_word(s): # # 利用正则按标点和空格切割,有其他标点可以添加到[]内 # ...

  10. OSVOS 半监督视频分割入门论文(中文翻译)

    摘要: 本文解决了半监督视频目标分割的问题.给定第一帧的mask,将目标从视频背景中分离出来.本文提出OSVOS,基于FCN框架的,可以连续依次地将在IMAGENET上学到的信息转移到通用语义信息,实 ...