对AFN和ASI各自使用方法及区别的总结
来源:互联网 发布:手机录音剪辑软件 编辑:程序博客网 时间:2024/05/16 08:50
首先来说下AFNetworking:
一、2大管理对象
1.AFHTTPRequestOperationManager
* 对NSURLConnection的封装
2.AFHTTPSessionManager
* 对NSURLSession
的封装
二、AFHTTPRequestOperationManager
的具体使用
1.创建管理者AFHTTPRequestOperationManager \*mgr = [AFHTTPRequestOperationManager manager];
2.封装请求参数
NSMutableDictionary \*params = [NSMutableDictionary dictionary];params[@"username"] = @"哈哈";params[@"pwd"] = @"123";
3.发送请求
NSString *url = @"http://localhost:8080/LWServer/login";[mgr POST:url parameters:params success:^(AFHTTPRequestOperation \*operation, id responseObject) { // 请求成功的时候调用这个block NSLog(@"请求成功---%@", responseObject); } failure:^(AFHTTPRequestOperation \*operation, NSError *error) { // 请求失败的时候调用调用这个block NSLog(@"请求失败"); }];// GET请求[mgr GET:url parameters:params success:^(AFHTTPRequestOperation \*operation, id responseObject) { // 请求成功的时候调用这个block NSLog(@"请求成功---%@", responseObject); } failure:^(AFHTTPRequestOperation \*operation, NSError *error) { // 请求失败的时候调用调用这个block NSLog(@"请求失败"); }];
三、对服务器返回数据的解析
1.AFN可以自动对服务器返回的数据进行解析
* 默认将服务器返回的数据当做JSON来解析
2.设置对服务器返回数据的解析方式
1> 当做是JSON来解析(默认做法)
* mgr.responseSerializer = [AFJSONResponseSerializer serializer];
* responseObject
的类型是NSDictionary
或者NSArray
2> 当做是XML来解析
* mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
* responseObject
的类型是NSXMLParser
3> 直接返回data
* 意思是:告诉AFN不要去解析服务器返回的数据,保持原来的data即可
* mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
3.注意
* 服务器返回的数据一定要跟responseSerializer对得上
1> 服务器返回的是JSON数据
* AFJSONResponseSerializer
* AFHTTPResponseSerializer
2> 服务器返回的是XML数据
* AFXMLParserResponseSerializer
* AFHTTPResponseSerializer
3> 服务器返回的是其他数据
* AFHTTPResponseSerializer
其次说下是asi-http-request:
一、发送请求的2个对象
1.发送GET请求:ASIHttpRequest
2.发送POST请求:ASIFormDataRequest
* 设置参数
// 同一个key只对应1个参数值,适用于普通“单值参数”- (void)setPostValue:(id <NSObject>)value forKey:(NSString \*)key// 同一个key(同一个参数名),会对应多个参数值,适用于“多值参数”- (void)addPostValue:(id <NSObject>)value forKey:(NSString \*)key
二、发送请求
1.同步请求
* startSynchronous
2.异步请求
* startAsynchronous
三、监听请求的过程
1.如何监听请求过程
1> 为代理,遵守<ASIHTTPRequestDelegate>
协议,实现协议中的代理方法
request.delegate = self;- (void)requestStarted:(ASIHTTPRequest *)request;- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders;- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;- (void)requestFinished:(ASIHTTPRequest *)request;- (void)requestFailed:(ASIHTTPRequest *)request;
2> 成为代理,不遵守<ASIHTTPRequestDelegate>
协议,自定义代理方法
request.delegate = self;[request setDidStartSelector:@selector(start:)];[request setDidFinishSelector:@selector(finish:)];
3> 设置block
[request setStartedBlock:^{ NSLog(@"setStartedBlock");}];[request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) { NSLog(@"setHeadersReceivedBlock--%@", responseHeaders);}];[request setDataReceivedBlock:^(NSData *data) { NSLog(@"setDataReceivedBlock--%@", data);}];[request setCompletionBlock:^{ NSLog(@"setCompletionBlock");}];[request setFailedBlock:^{ NSLog(@"setFailedBlock");}];
2.监听的使用注意
* 如果同时设置了block和实现了代理方法,请求过程中,block和代理方法都会调用
* 一般的调用顺序:代理方法 > block
3.如果实现了下面的代理方法,那么responseData\responseString
就没有值
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;
四、文件下载
1.一般的下载
1> 设置文件下载的保存路径
request.downloadDestinationPath = filepath;
2> 设置进度监听的代理(要想成为进度监听代理,最好遵守<ASIProgressDelegate>
协议)
request.downloadProgressDelegate = self.progressView;
2.断点下载(断点续传)
1> 设置文件下载的临时路径
request.temporaryFileDownloadPath = tempFilepath;
2> 设置支持断点续传
request.allowResumeForFileDownloads = YES;
五、文件上传(设置文件参数)
1.如果知道文件路径,最好就用这个方法(因为简单)
// ASI内部会自动识别文件的MIMEType[request setFile:file forKey:@"file"];[request addFile:file forKey:@"file"];[request setFile:file withFileName:@"basic.pptx" andContentType:@"application/vnd.openxmlformats-officedocument.presentationml.presentation" forKey:@"file"];// .....
2.如果文件数据是动态产生的,就用这个方法(比如刚拍照完获得的图片数据)
[request setData:data withFileName:@"test.png" andContentType:@"image/png" forKey:@"file"];
六、ASIHttpRequest
的常见用法
1.请求超时
@property (atomic, assign) NSTimeInterval timeOutSeconds;
2.获得错误信息
@property (atomic, retain) NSError *error;
3.获得响应数据
// 状态码@property (atomic, assign,readonly) int responseStatusCode;// 状态信息@property (atomic, retain,readonly) NSString *responseStatusMessage;// 服务器返回的具体数据(NSString格式)- (NSString *)responseString;// 服务器返回的具体数据(NSData格式)- (NSData *)responseData;
最后是重点内容,也是面试时经常会问的问题,两者的区别:
一、底层实现
1> AFN的底层基于OC的NSURLConnection
和NSURLSession
2> ASI的底层基于纯C语言的CFNetwork
框架
3> ASI的运行性能 高于 AFN
二、对服务器返回的数据处理
1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string
2> AFN提供了多种对服务器数据处理的方式
* JSON处理
* XML处理
* 其他处理
三、监听请求的过程
1> AFN提供了success
和failure
两个block来监听请求的过程(只能监听成功和失败)
* success
: 请求成功后调用
* failure
: 请求失败后调用
2> ASI提供了3套方案,每一套方案都能监听请求的完整过程
(监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)
* 成为代理,遵守协议,实现协议中的代理方法
* 成为代理,不遵守协议,自定义代理方法
* 设置block
四、在文件下载和文件上传的使用难易度
1> AFN
* 不容易监听下载进度和上传进度
* 不容易实现断点续传
* 一般只用来下载不大的文件
2> ASI
* 非常容易实现下载和上传
* 非常容易监听下载进度和上传进度
* 非常容易实现断点续传
* 下载或大或小的文件都行
五、ASI提供了更多的实用功能
1> 控制圈圈要不要在请求过程中转
2> 可以轻松地设置请求之间的依赖:每一个请求都是一个NSOperation
对象
3> 可以统一管理所有请求(还专门提供了一个叫做ASINetworkQueue
来管理所有的请求对象)
* 暂停\恢复\取消所有的请求
* 监听整个队列中所有请求的下载进度和上传进度
以上就介绍了开发经验: 对AFN和ASI各自使用方法及区别的总结,包括了方面的内容,希望对IOS开发有兴趣的朋友有所帮助。
- 对AFN和ASI各自使用方法及区别的总结
- AFN和ASI各自使用方法及区别的总结
- ASI和AFN的区别
- AFN和ASI的区别
- ASI和AFN的区别
- AFN和ASI的区别
- ASI、AFN的区别
- 26>AFN和ASI的区别
- ASI和AFN的区别(面试题)
- ASI与AFN的区别
- ASI与AFN的区别
- ASI与AFN的区别
- AFN与ASI的区别
- ASI与AFN的区别
- AFN 与 ASI 的区别
- AFN和ASI的底层实现和区别
- iOS面试题 AFN和ASI框架的区别
- iOS面试题 AFN和ASI框架的区别
- 实现守护进程
- android调用系统相机拍照并保存在本地
- 微信公众号素材管理新增其他类型永久素材
- plsql 登录时出现 无法解析指定的标识符 问题
- XStream的例子
- 对AFN和ASI各自使用方法及区别的总结
- 【前端小代码】选中checkbox多选框,将值填入select中option中
- POJ3768 较复杂分形题目
- nc 的debug 配置调整
- SDWebImage详解
- jQuery学习--jQuery DOM 操作
- JavaBean的命名规则
- <T> List<T>的用法
- Android 数据存储 《第一行代码》