AFN和ASI区别
AFN和ASI区别
1.底层实现
1> AFN的底层基于OC的NSURLConnection和NSURLSession
2> ASI的底层基于纯C语言的CFNetwork框架
3> ASI的运行性能 高于 AFN
2.对服务器返回的数据处理
* XML处理
* 其他处理
3.监听请求的过程
1> AFN提供了success和failure两个block来监听请求的过程(只能监听成功和失败)
* success : 请求成功后调用
* failure : 请求失败后调用
2> ASI提供了3套方案,每一套方案都能监听请求的完整过程
(监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)
* 成为代理,遵守协议,实现协议中的代理方法
* 成为代理,不遵守协议,自定义代理方法
* 设置block
4.在文件下载和文件上传的使用难易度
1> AFN
* 不容易监听下载进度和上传进度
* 不容易实现断点续传
* 一般只用来下载不大的文件
2> ASI
* 非常容易实现下载和上传
* 非常容易监听下载进度和上传进度
* 非常容易实现断点续传
* 下载或大或小的文件都行
5.ASI提供了更多的实用功能
3> 可以统一管理所有请求(还专门提供了一个叫做ASINetworkQueue来管理所有的请求对象)
* 暂停\恢复\取消所有的请求
* 监听整个队列中所有请求的下载进度和上传进度
AFN和ASI的对比的参照图
http://wenku.baidu.com/link?url=PAzbEWzLxF9U499tWk9h_9ekrAr27O3_OeyGYaBUL4K6EbHn3VMYahbEkoIwzXxC3mWfvhCROQmW8uyiXJhWAcct6Y9KATNPHACZfDPt2US
二.AFN介绍
1.AFHTTPRequestOperationManager是对NSURLConnection的封装,在iOS6已经过时!
以下是AFN内部的原话,所以AFHTTPRequestOperationManager已经过时了,现在大多用AFHTTPSessionManager
/*
For developers targeting iOS 6 or Mac OS X 10.8 or earlier,AFHTTPRequestOperationManager` may be used to similar effect.
要开发 iOS 6 或 Mac OS X 10.8 之前版本,建议使用
*/
3.AFN2.0和3.0的比较
AFN2.0
.对NSURLSession的封装,
.对AFURLConnection的封装,
.对HTTPS网络安全请求做了一个包装,
.做了一个网络连接管理的一个包装,
AFN3.0
添加进度回调
去掉所有AFURLConnection
4.AFN功能简介
AFN 主要用来发送网络请求
AFNetworkReachabilityManager :用来实时监测当前网络状态的!
AFSecurityPolicy :安全策略:支持 HTTPS 请求.
如何在AFN中使用HTTPS的请求参照以下资料
http://blog.csdn.net/doubleuto/article/details/42154109
5.AFN发送网络请求时的注意点
.默认的使用JSON解析器解析JSON数据,返回的默认就是 JSON 解析之后的数据!
.网络请求成功后默认回到主线程
.插入数据的格式
//manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript" ,@"text/plain",nil];
.发送网络请求里面的参数说明
// parameters :参数字典
// progress :进度. AFN 3.0 之后推出的. 没有任何用处!
// success :成功回调.{成功的要求: 1.网络请求成功; 2.服务器返回的必须是 JSON 数据; 3.自己(AFN)还能够解析 JSON数据}
6.AFN中解析器的类型,返回的数据类型,所能解析的数据
要根据服务器返回的数据类型,选择合适的解析器类型!
// 1. JSON 解析器: JSON 解析之后的数据. ------ JSON
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// 2. XML 解析器: NSXMLParser ------ XML/默认是 SAX 解析.
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
// 3. 万能解析器: NSData 数据. ----- JSON /XML /HTML /各种文件...
// 对于文件/图片/视频/网页HTML,只能选择 万能解析器!
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
7.利用AFN检测网络状态的步骤
. 实例化网络工具监测类.
. 设置网络状态改变之后的操作.
.开启网络监测
三.AFN对文件的上传和下载
1.文件上传的注意事项
AFN 只支持单文件上传!默认将后台传回的JSON数据解析成OC的数据类型.
步骤:
.拼接本地文件的路径,以file://,注意如果路径中有汉字要用以下方法转义
stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]
.发送file请求(同步)获得文件的类型名字(url:统一资源定位符. http:// 网络资源 file://本地资源)
.AFN发送post请求上传文件
/*
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
*/
.constructingBodyWithBlock内封装form表单
// name: 服务器接收文件参数的 key 值.
// fileName: 上传文件在服务器中保存的名称.
// mimeType: 上传文件的文件类型.
[form appendPartWithFileURL:url name:@"userfile" fileName:@"w" mimeType:response.MIMEType error:NULL];
注意:通过form表单追加文件是不能实现多文件上传的
2.AFN实现文件的下载
- (void)downLoadMonitor
{
// 声明一个进度对象
NSProgress *progress = nil;
// 1.创建网络管理者
// AFHTTPSessionManager 基于NSURLSession
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.利用网络管理者下载数据
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost.video.zip"]];
/*
destination
- targetPath: 系统给我们自动写入的文件路径
- block的返回值, 要求返回一个URL, 返回的这个URL就是剪切的位置的路径
completionHandler
- url :destination返回的URL == block的返回的路径
*/
/*
@property int64_t totalUnitCount; 需要下载文件的总大小
@property int64_t completedUnitCount; 当前已经下载的大小
*/
NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];
// NSLog(path);
return [NSURL fileURLWithPath:path];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"%@",filePath.absoluteString);
}];
/*
要跟踪进度,需要使用 NSProgress,是在 iOS 7.0 推出的,专门用来跟踪进度的类!
NSProgress只是一个对象!如何跟踪进度!-> KVO 对属性变化的监听!
@property int64_t totalUnitCount; 总单位数
@property int64_t completedUnitCount; 完成单位数
*/
// 给Progress添加监听 KVO
// [progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil];
// 3.启动任务
[downTask resume];
}
- (void)downLoadMonitor
{
// 声明一个进度对象
NSProgress *progress = nil;
// 1.创建网络管理者
// AFHTTPSessionManager 基于NSURLSession
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.利用网络管理者下载数据
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost.video.zip"]];
/*
destination
- targetPath: 系统给我们自动写入的文件路径
- block的返回值, 要求返回一个URL, 返回的这个URL就是剪切的位置的路径
completionHandler
- url :destination返回的URL == block的返回的路径
*/
/*
@property int64_t totalUnitCount; 需要下载文件的总大小
@property int64_t completedUnitCount; 当前已经下载的大小
*/
NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];
// NSLog(path);
return [NSURL fileURLWithPath:path];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"%@",filePath.absoluteString);
}];
/*
要跟踪进度,需要使用 NSProgress,是在 iOS 7.0 推出的,专门用来跟踪进度的类!
NSProgress只是一个对象!如何跟踪进度!-> KVO 对属性变化的监听!
@property int64_t totalUnitCount; 总单位数
@property int64_t completedUnitCount; 完成单位数
*/
// 给Progress添加监听 KVO
// [progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil];
// 3.启动任务
[downTask resume];
}
AFN和ASI区别的更多相关文章
- 第三方框架、AFN、ASI、SDWebImage
AFN 一.2大管理对象1.AFHTTPRequestOperationManager* 对NSURLConnection的封装 2.AFHTTPSessionManager* 对NSURLSessi ...
- IOS开发 AFN和ASI
做项目有一段时间了,项目过程中处理网络请求难免的,而对于选择第三方来处理网络请求肯定是个明智的选择! AFNetworking和ASIHTTPRequest 这两个第三方该如何选择 我 ...
- [ 流行的网络框架 ] AFN & ASI
1.AFN & ASI(早已经停止更新,但现在许多公司也在使用.) AFNetWorking地址:https://github.com/AFNetworking/AFNetworking AS ...
- iOS开发之AFN的基本使用
本篇将从四个方面对iOS开发中经常使用到的AFNetworking框架进行讲解: 一.什么是 AFN 二.为什么要使用 AFN 三.AFN 怎么用 三.AFN和ASI的区别 一.什么是 AFN AFN ...
- iOS-技巧性总结
1.AFN与ASI对比 -- AFN1. 基于 NSURLConnection & NSURLSession 进行的封装2. 使用简单3. 提供了自动的序列化 & 反序列化支持! AF ...
- 李洪强iOS经典面试题129
1. 怎么解决缓存池满的问题(cell) ios中不存在缓存池满的情况,因为通常我们ios中开发,对象都是在需要的时候才会创建,有种常用的说话叫做懒加载,还有在UITableView中一般只会创建刚开 ...
- iOS - ASIHTTPRequest 网络请求
前言 使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 AP ...
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest(转载)
在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和方法, ...
- Objective-C基础知识点总结
一.#import 和 #include 的区别,@class代表什么?@class 和 #import 的区别?#import<> 和 #import""的区别 答: ...
随机推荐
- js验证输入的金钱格式
<html> <head> <title>js验证输入的金钱格式</title> <script type="text/javascri ...
- 【Cocos2d-x for WP8 学习整理】(2)Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源
这一阵花了些时间,把 cocos2d-html5 里的sample 游戏<Fruit Attack>给移植到了WP8上来,目前已经实现了基本的功能,但是还有几个已知的bug,比如WP8只支 ...
- Eclipse调试 : step into,step over,step return 说明
step into : 单步执行,遇到子函数就进入并且继续单步执行(F5) step over: 在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完在停止,也就是把 ...
- HTML5页面绘图
canvas 标签:获取画笔: 对象.getContext("2d")制定画笔Syte: context.fillStyle = "red"; context. ...
- textbox 和lable换行保存和显示
前台: <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"& ...
- Windows中使用OpenBLAS加速R语言计算速度
在使用R的时候会发现R对CPU的利用率并不是很高,反正当我在使用R的时候,无论R做何种运算R的CPU利用率都只有百分子几,这就导致一旦计算量大的时候计算时间非常长,会给人一种错觉(R真的在计算吗?会不 ...
- type of 操作符和instanceof操作符的区别以及使用方法
经常见到用typeof和instanceof检测一个变量类型,作为前端小白经常不知道这两者具体的详细用法和区别,今天就整理一下谨记! javaScript中有6中数据类型: 1.Undefinde 2 ...
- CSS常用属性
//边界线 border: 1px solid #E4E4E4; //绝对 定位 position: absolute; //相对定位 position: relative; //超出部分隐藏 ove ...
- android studio的Beta, Canary, Dev, Stable四种Channel版本介绍、分析与选择
一.概述 在Android Studio下载官网上,有如下介绍: ` Android Studio's built-in update mechanism can be set to receive ...
- CentOS7 编译安装 Mariadb (实测 笔记 Centos 7.0 + Mariadb 10.0.15)
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...