AFNetworking 是基于NSURLConnection, NSOperation开发的一款三方框架,主要用于处理一些关于网络请求上的业务,下文会简单介绍框架中经常使用的功能,如文件的上传,下载,解析.

一.GET&POST 请求

1 .首先最重要的当然是导入头文件

#import "AFNetworking.h"

2. 创建会话管理者(创建的管理者对象并不是单例)

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]

3.最后很简单,只要直接调用方法就可以了

GET后面第一个参数,就是我们所说的请求头,但是这里有个注意问题:平时我们使用NSURLConnection和NSURLSession时发送GET请求时所有内容都是写入请求头中的,也就是请求地址中要加上一大推参数,而在这个方法中AFN将请求体信息单独抽出来,放在红色背景的这块区域,你可以将你所要上传的请求体包装成字典,然后作为参数添加到其中,这样做有个好处就是当我们发送POST请求时, 只需要将此方法中的GET替换成POST即可

get请求
[manager GET:@"http://***.**.***.***:*****/login" parameters:<#(nullable id)#> progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
请求成功,会调用此block,responseObject为响应体信息,内部已经将信息完成了序列化
NSLog(@"%@--%@",[responseObject class],responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
如果请求失败,会调用此block error 则为请求失败原因
}];
post请求 可以看出两个方法只差一个单词
       [manager POST:@"http://***.**.***.***:*****/login" parameters:<#(nullable id)#> progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
//3.解析
NSLog(@"%@--%@",[responseObject class],responseObject);
==
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
}];
}

二.AFN下载文件

1 .同样是简单的方法调用,

   //1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"随便添加一张网上照片的地址"]]; //3.创建下载任务
/*
第一个参数:请求对象
第二个参数:进度回调 downloadProgress(获得进度信息)
第三个参数:destination
targetPath:文件的临时存储路径
response:响应头信息
返回值:NSURL(AFN内部已经实现了文件剪切的过程,但是需要我们告诉他应该把文件剪切到哪里)
第四个参数:completionHandler 请求完成的时候调用
response:响应头信息
fileP ath==fullPath 文件的最终目录(第三个参数回调的返回值)
error:错误信息
[manager downloadTaskWithRequest:<#(nonnull NSURLRequest *)#> 
progress:<#^(NSProgress * _Nonnull downloadProgress)downloadProgressBlock#>
destination:<#^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response)destination#>
completionHandler:<#^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error)completionHandler#>]

这里要注意的是:我们可以在第二个参数回调里监听下载进度(回调返回参数downloadProgress内含参数)

downloadProgress.completedUnitCount /downloadProgress.totalUnitCount)

而第三个参数回调是要有返回值的,返回值就是文件最终的存储位置,正如上面所说,剪切过程在内部实现,你只需要return一个地址,通常的做法,在参数response中有个建议文件名称属性(suggestedFilename),我们将它拼接到沙盒路径下就可以得到一个存储文件地址了,具体代码如下

//        沙盒路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
// 拼接全路径
NSString *fullPath = [path stringByAppendingPathComponent:response.suggestedFilename];
return fullPath ;

三.上传文件

基本用法与下载类似,响应参数也差不多,只有第三个参数需要我们注意,下面代码中已标红

 //1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.发送POST请求上传文件
/*
第一个参数:请求路径 NSString
第二个参数:非文件参数
第三个参数:constructingBodyWithBlock 用来拼接要上传的文件数据
第四个参数:progress进度回调
第五个参数:success 上传成功的回调
第六个参数:failure 失败后的回调
*/
[manager POST:@"http://120.25.226.232:32433/upload" parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//FileURL:要上传的文件的URL路径
NSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/Desktop/1233.png"];//该方法是简单版本,该方法内部会自动的得到文件的名称以及文件的类型(方法里面name为服务器中存储文件的名称)
[formData appendPartWithFileURL:fileUrl name:@"file" error:nil]; } progress:^(NSProgress * _Nonnull uploadProgress) {
上传进度
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功---%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败---%@",error);
}];
}
先介绍这些,AFN还有很多实用的方法,下载图片、解析数据等,很方便实用有时间再多写一些.
 

iOS-三方框架AFNetworking基本使用的更多相关文章

  1. iOS网络框架 AFNetworking

    -(void)GetActivationUser{ NSString *url = @"http://app.xxxx.com/music/search?key=%E9%AC%BC%E5%9 ...

  2. 李洪强iOS经典面试题142-第三方框架及其管理

    李洪强iOS经典面试题142-第三方框架及其管理   第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第 ...

  3. iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range

    一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...

  4. iOS常用框架源码分析

    SDWebImage NSCache 类似可变字典,线程安全,使用可变字典自定义实现缓存时需要考虑加锁和释放锁 在内存不足时NSCache会自动释放存储的对象,不需要手动干预 NSCache的key不 ...

  5. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  6. [iOS 主要框架的总结]

    原文地址:http://blog.csdn.net/GooHong/article/details/28911301 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件, ...

  7. OS10.11系统下 安装cocoapods 以及 安装cocoapods-xcode-plugin-master插件来加载三方框架

    http://www.cnblogs.com/cheng923181/p/4883476.html OS10.11系统下 安装cocoapods 以及 安装cocoapods-xcode-plugin ...

  8. swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程

    swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3  注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...

  9. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...

随机推荐

  1. 关于python中带下划线的变量和函数 的意义

    总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量 2.  前带两个_ ,后带两个_ 的变量:  标明是内置变量, 3.  大写加下划线的变量: ...

  2. 使用oh-my-zsh后导致的卡顿问题

    现象是每次cd和ll时都会被卡住很长时间根本受不了,最后在官方github查明原因是使用的主题会自动获取git信息,可以使用以下命令禁止zsh自动获取git信息,解决卡顿问题 git config - ...

  3. visual foxpro命令

    根据条件查看已打开dbf表单的记录----LIST ALL FIELDS FOR =''   最后按一下enter键

  4. jQuery小节

    jQuery 语法 jQuery 选择器 在前面的章节中,我们展示了一些有关如何选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是如何准确地选取您希望应用效果的元素. jQuery 元 ...

  5. JSP开发模式2(计算器)

    CalculatorBean———————————————————————————————————————————— public class CalculatorBean {    private ...

  6. jQuery事件对象event的属性和方法

    事件处理(事件对象.目标元素的获取,事件对象的属性.方法等)在不同浏览器之间存在差异,jQuery在遵循W3C规范的情况下做了封装统一 一.事件对象常用的属性: event.type:获取事件的类型, ...

  7. JVM垃圾收集器基本思想

    要做JVM内存垃圾回收首先要明确两个问题: 哪些内存需要回收 怎么回收 什么时候回收 1.哪些内存需要回收 jvm内存可以分为两类: 线程独占内存区域(程序计数器.虚拟机栈.本地方法栈) 线程共享区域 ...

  8. android之handle

    Android中异步消息处理主要由四个部分组成,Message.handler.messageQueue和looper. 1.message message是线程之间传递的消息,他可以在内部携带少量的 ...

  9. SQL Server 2012 通用分页存储过程

    创建存储过程: USE [数据库名] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCedure [dbo].[Split ...

  10. 全基因组关联分析(Genome-Wide Association Study,GWAS)流程

    全基因组关联分析流程: 一.准备plink文件 1.准备PED文件 PED文件有六列,六列内容如下: Family ID Individual ID Paternal ID Maternal ID S ...