AFN和ASI的区别

AB脉冲详解(编码器,PLC,上位机) 编码器线有些是用不到的。Z脉冲:360度中,只有1度是输出,输出能力是。编码器实际就是发光二极管,所以电流超过20ma会缩短寿命或损坏。 阅读详情
一、AFN和ASI的区别
ASI的使用参照文顶顶的
http://www.cnblogs.com/wendingding/p/3950027.html 

1.底层实现
1> AFN的底层基于OC的NSURLConnection和NSURLSession
2> ASI的底层基于纯C语言的CFNetwork框架
3> ASI的运行性能 高于 AFN

2.对服务器返回的数据处理
1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string
2> AFN提供了多种对服务器数据处理的方式
* JSON处理
* XML处理
* 其他处理

3.监听请求的过程
1> AFN提供了success和failure两个block来监听请求的过程(只能监听成功和失败)
* success : 请求成功后调用
* failure : 请求失败后调用

2> ASI提供了3套方案,每一套方案都能监听请求的完整过程
(监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)
* 成为代理,遵守协议,实现协议中的代理方法
* 成为代理,不遵守协议,自定义代理方法
* 设置block

4.在文件下载和文件上传的使用难易度
1> AFN
* 不容易监听下载进度和上传进度
* 不容易实现断点续传
* 一般只用来下载不大的文件

2> ASI
* 非常容易实现下载和上传
* 非常容易监听下载进度和上传进度
* 非常容易实现断点续传
* 下载或大或小的文件都行

5.ASI提供了更多的实用功能
1> 控制圈圈要不要在请求过程中转     
2> 可以轻松地设置请求之间的依赖:每一个请求都是一个NSOperation对象
3> 可以统一管理所有请求(还专门提供了一个叫做ASINetworkQueue来管理所有的请求对象)
* 暂停\恢复\取消所有的请求
* 监听整个队列中所有请求的下载进度和上传进度
AFN和ASI的对比的参照图
http://wenku.baidu.com/link?url=PAzbEWzLxF9U499tWk9h_9ekrAr27O3_OeyGYaBUL4K6EbHn3VMYahbEkoIwzXxC3mWfvhCROQmW8uyiXJhWAcct6Y9KATNPHACZfDPt2US

二.AFN介绍

1.AFHTTPRequestOperationManager是对NSURLConnection的封装
以下是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 之前版本,建议使用
*/
2.AFHTTPSessionManager对NSURLSession的封装

3.AFN2.0和3.0的比较
AFN2.0
.对NSURLSession的封装,
.对AFURLConnection的封装,
.对HTTPS网络安全请求做了一个包装,
.做了一个网络连接管理的一个包装,
AFN3.0
添加进度回调
去掉所有AFURLConnection
4.AFN功能简介
AFN 主要用来发送网络请求
AFNetworkReachabilityManager :用来实时监测当前网络状态的!
AFSecurityPolicy :安全策略:支持 HTTPS 请求.
如何在AFN中使用HTTPS的请求参照以下资料
http://blog.youkuaiyun.com/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];

}

下面是使用KVO监听下载进度
 

// 执行下载文件的方法,可以监控下载进度
- (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];

}

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解 系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助! 阅读详情

相关推荐

Labview数据存储与读取——TDMS文件的创建与写入

Labview数据存储与读取——TDMS文件的创建与写入 你好,这是我在自学Labview编写软件过程中使用的一些功能。我在存储采集卡数据时,通过阅读大量他人的程序,发现TDM及TDMS文件十分适合波形数据的记录,TDMS文件比TDM文件在存储动态类型数据时读写速度更快,而且TDMS 文件没有容量限制,适合存储数据量庞大的测试数据。 前言少叙,书归正传 这一篇博客,说明一下如何使用基本的TDMS功能实现数据文件的存储。 所需要的控件如上图所示,在程序框图——编程——文件I\O——TDMS 中,写入TDMS

滑板小帅程序开发 2万+

AFNetworking解析(三)

本文回详细的介绍一下Multipart协议在AFN中的使用,以及在请求中和后台的交互,其中主要介绍挑战认证的处理Multipart协议Multipart协议是基于post方法的组合实现,和post协议的主要区别在于请求头和请求体的不同 multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需

此生长安的博客 6710

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

AFN小记

一、AFN和ASI的区别ASI的使用参照文顶顶的http://www.cnblogs.com/wendingding/p/3950027.html1.底层实现1> AFN的底层基于OC的NSURLConnection和NSURLSession2> ASI的底层基于纯C语言的CFNetwork框架3> ASI的运行性能 高于 AFN2.对服务器返回的数据处理 1&gt...

dkaq53672的博客 263

Spark Catalog详解

旁边的实习生说:我想要用spark代码中对hive库中的内部表和外部表进行删除(包括数据),咋感觉网上搜了一圈都找不到解决方案啊,spark这么鸡肋吗?我:你应该静下心来好好把spark基础知识进行全面学习。实习生:难道spark有这功能,而我没有学习过?咋弄啊?我:学习一下Spark Catalog。实习生:啥是Catalog啊?Spark Catalog是Spark SQL中的一个元数据管理组件,它提供了一个集中化的存储和查询表、视图和函数的位置。

SunnyRivers 1814

OpenClaw零基础教程:30分钟搭建你的第一个AI自动化助手

别再看那些满是代码、专业术语的教程了,那些都是给程序员看的。这篇教程,我把所有步骤拆到了极致,你跟着点鼠标就行,点错了都没关系,大不了重装一遍,5分钟的事。

2601_94871597的博客 96

ios 拍照上传到服务器_ios 使用AFN上传图片到服务器

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/html",@"text/json",...

weixin_36488250的博客 198

22、云数据中心网络(DCN)部署最佳实践

本文详细介绍了云数据中心网络(DCN)部署的最佳实践,涵盖SDN设计、服务网络规划、管理网络规划等方面。通过合理的架构设计、路由规划和组件协同,提升数据中心的自动化水平、可靠性及安全性,以满足不断增长的业务需求。

d6e7f8的博客 186

ios 上传多张图片总结——IOS网络访问之使用AFNetworking

ios 上传图片文件 或者 视频    AFHTTPRequestOperationManager 上传图片(多张)参考文献: http://www.blogjava.net/qileilove/archive/2014/12/11/421323.html 下面两个函数是可以用的: [objc] view plaincopy

lishichao706的专栏 7267

36、T5L 迪文屏C51开发之绘制动态曲线

T5L 迪文屏C51开发之绘制动态曲线1、介绍2、例程功能简介3、GUI界面设计3、C51程序设计 1、介绍   本文将利用DGUS Tool软件中的【动态曲线控件】来绘制曲线效果,在T5L迪文屏中总共支持8个通道的曲线,而曲线数据是需要缓冲区的,如果 8 通道曲线同时使用,0x1000-0x4FFF 将作为曲线缓冲区地址,此时该部分变量地址不能被其他控键使用,其他控键地址使用范围为0x5000-0xFFFF,当某曲线通道不被使用时,那么其所对应的缓冲区地址可以做其他用途,曲线通道具体的地址分布如下图所示:

嵌入式羊圈 3129

i.MX6ULL系统移植 | 使用busybox制作根文件系统(1.29.0)

一. 下载BusyBox BusyBox是一个继承了大量Linux命令核工具的软件,像常用的ls、cp、mv、ifconfig等命令。一般下载BusyBox的源码,然后配置Busybox,选择自己想要的功能,最后编译即可。 BusyBox在官方可以直接下载:https://www.busybox.net/。目前最新是1.35.0,这里我使用1.29.0版本。 axel https://www.busybox.net/downloads/busybox-1.29.0.tar.bz2 下载之后解压: tar

Mculover666的博客(嵌入式) 1144

iOS之ASI和AFN有什么区别

ASI和AFN有什么区别 1.性能(重点) * ASI基于底层的CFNetwork框架 * AFN基于NSURLConnection * 运行性能: ASI > ASN   2.处理服务器数据 1> AFN : 根据服务器返回数据的数据, 进行自动解析 * 服务器返回的是JSON数据, 自动转换为NSDictionary或者NSArray * 服务器返回的是XML数据, 自动转换

u010130947的专栏 1831

Qt C++ HTTP 调用通义千问大模型 X 学术论文润色工具(SCI 格式适配)

请求地址:`https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation`;| Windows | 打包时携带 `Qt6Network.dll`/`libcrypto-1_1-x64.dll` 等依赖;| Linux | 安装 `libssl-dev` 和 `libcurl4-openssl-dev`;| API 调用失败 | 检查 API-KEY 是否有效;

寒寒豆豆软件公司的博客 104

ASI和AFN有什么区别

ASI和AFN有什么区别 1.性能 *ASI基于底层的CFNetwork *AFN基于NSURLConnection *运行性能:ASI>AFN 2.处理服务器数据 1>AFN: *根据服务器返回的数据的类型进行自动解析JSON,XML *利用success和failure两个block 2>ASI *

Nicholas的专栏 674

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

AFN和ASI的底层实现和区别

本篇将从四个方面对iOS开发中经常使用到的AFNetworking框架进行讲解: 一、什么是 AFN 二、为什么要使用 AFN 三、AFN 怎么用 三、AFN和ASI的区别   一、什么是 AFN AFN 全称为 AFNetworking,是一个构建与在 NSURLConnection、NSOperation 以及其他熟悉的 Founation 技术之上的一个

iOSbird的博客 2994

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

AFN与ASI的区别

ASI和AFN以及底层框架的关系    对比 ASI AFN 更新状态 2012年10月份,已经停止更新 持续更新中,目前已更新至2.0版 介绍 ASI的直接操作对象ASIHTTPRequest,是一个实现了了NSCopying协议的NSOperation子类。 在initialize和initWith

月亮之上 707

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ASI与AFN的区别

ASI与AFN的区别区别

amoslyc的博客 666

ASI和AFN的区别

一、底层实现1> AFN的底层基于OC的NSURLConnection和NSURLSession2> ASI的底层基于纯C语言的CFNetwork框架3> ASI的运行性能 高于 AFN 二、对服务器返回的数据处理1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string2> AFN提供了多种对服务器数据处理的方式* JSON处理* XML处理* 其他处理 三、监听请求的过

zyc2011的博客 290

iOS中ASI和AFN的区别

一、底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高于 AFN 二、对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string 2> AFN提供了多种对服务器数据处理的方式 *...

weixin_30360497的博客 84

ASI 与 AFN的区别要点

ASI与AFN区别:(要点) 性能 (*)ASI基于底层的CFNetWork AFN基于NSURLConnection 运行性能 ASI > AFN 处理服务器数据AFN : 根据服务器返回数据的类型,进行自动解析 服务器返回的是JSON数据,自动转换为NSDictionray或者NSArray 服务器返回的XML数据,自动转换为NSXMLParser ASI : 并没有对服务器返回数

ismilesky的博客 898

AFN 与 ASI 有什么区别

一、底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高于 AFN 二、对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string 2> AFN提供了多种对服务器数据处理的方式 * JSON处理 * XML处理

酸柠檬的博客 414

ASI和AFN的区别(面试题)

一.底层实现 1>AFN的底层基于OC NSURLConnection和NSURLSession 2.ASI的底层基于纯C语言的CFNetwork框架 3.ASI的运行性能高于AFN 二,对服务器返回数据处理 1>ASI没有直接提供对服务器数据处理的方式,直接返回 data\string 2>AFN提供了多种对服务器数据处理的方式 1.J

qq_33030123的博客 711

AFN 与 ASI 的区别

1. AFN基于NSURL,ASI基于底层的CFNetwork框架,因此ASI的性能优于AFN 2.AFN采取block的方式处理请求,ASI最初采取delegate的方式处理请求,后面也增加了block的方式 3. AFN只封装了一些常用功能,满足基本需求,直接忽略了很多扩展功能,比如没有封装同步请求;ASI提供的功能较多,预留了各种接口和工具供开发者自行扩展 4.AFN直接解析服务器返回

a892780582的博客 308

悲哀的 ASI ,ASI 与 AFN 的区别

一、底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高于 AFN 这里补充一点 ASI 是继承自 NSOperation  二、对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\st

heartFlyings的博客 630
上一篇: 浅谈HTTP中Get与Post的区别
下一篇: iOS开发之CFNetWork的简单使用
lin_transform
博客等级 码龄9年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值