IOS-网络(ASI使用)
2016-02-16 00:07
651 查看
ASI与AFN区别
区别:
1.底层实现
1>AFN的底层基于OC的NSURLConnection与NSURLSession
2>ASI的底层基于纯C语言的CFNetWork框架
3>ASI运行性能高于AFN
2.对服务器返回的数据处理
1>ASI没有直接提供对服务器数据的处理方式,直接放回data\string
2>AFN提供多种对服务器的数据处理方式(JSON、XML、其他)
3.监听请求过程
1>ASI提供了3套方案,每套方法都能监听请求的完整过程
a.成为代理,遵守协议,实现协议方法
b.成为代理,不遵守协议,自定义代理方法
c.设置block
2>AFN提供两个block监听请求过程(success、failure)
a.success : 请求成功时调用
b.failure : 请求失败时调用
4.提供的功能
5.文件上传下载难易度
1>ASI
a.非常容易监听下载进度和上传进度
b.容易实现断点续传
c.下载或大或小文件都可以
d.非常容易实现下载和上传
2>AFN
a.不容易监听下载进度和上传进度
b.不容易实现断点续传
c.一般用来下载不大的文件
6.ASI提供了更多的实用功能
1>控制圈圈要不要再请求过程中转
2>可以轻松设置请求之间的依赖:每个请求都是NSOperation对象
3>可以统一管理所有请求(专门提供一个ASINetworkQueue来管理所有请求对象)
4>暂停、恢复、取消所有请求
5>监听整个队列中上传、下载进度
一、ASI用法
二、文件下载与上传
区别:
1.底层实现
1>AFN的底层基于OC的NSURLConnection与NSURLSession
2>ASI的底层基于纯C语言的CFNetWork框架
3>ASI运行性能高于AFN
2.对服务器返回的数据处理
1>ASI没有直接提供对服务器数据的处理方式,直接放回data\string
2>AFN提供多种对服务器的数据处理方式(JSON、XML、其他)
3.监听请求过程
1>ASI提供了3套方案,每套方法都能监听请求的完整过程
a.成为代理,遵守协议,实现协议方法
b.成为代理,不遵守协议,自定义代理方法
c.设置block
2>AFN提供两个block监听请求过程(success、failure)
a.success : 请求成功时调用
b.failure : 请求失败时调用
4.提供的功能
5.文件上传下载难易度
1>ASI
a.非常容易监听下载进度和上传进度
b.容易实现断点续传
c.下载或大或小文件都可以
d.非常容易实现下载和上传
2>AFN
a.不容易监听下载进度和上传进度
b.不容易实现断点续传
c.一般用来下载不大的文件
6.ASI提供了更多的实用功能
1>控制圈圈要不要再请求过程中转
2>可以轻松设置请求之间的依赖:每个请求都是NSOperation对象
3>可以统一管理所有请求(专门提供一个ASINetworkQueue来管理所有请求对象)
4>暂停、恢复、取消所有请求
5>监听整个队列中上传、下载进度
一、ASI用法
// // ViewController.m // IOS_0215_ASI // // Created by ma c on 16/2/15. // Copyright © 2016年 博文科技. All rights reserved. // #import "ViewController.h" #import "ASIHTTPRequest.h" @interface ViewController ()<ASIHTTPRequestDelegate> @end /* 监听ASI请求: 1>成为代理,遵守ASIHTTPRequestDelegate的协议,实现协议中的代理方法 2>成为代理,不遵守ASIHTTPRequestDelegate的协议,自定义代理方法 3>设置block */ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor cyanColor]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self asynCustomMethod]; } #pragma mark - 其他用法 #pragma mark - 自定义方法 - (void)asynCustomMethod { // 1.URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"]; // 2.创建一个请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.timeOutSeconds = 15; // 3.设置请求 [request startAsynchronous]; //设置监听方法 request.delegate = self; [request setDidStartSelector:@selector(start:)]; [request setDidFinishSelector:@selector(finish:)]; } - (void)start:(ASIHTTPRequest *)request { NSLog(@"start------%@",request); } - (void)finish:(ASIHTTPRequest *)request { NSLog(@"finish------%@",[request responseString]); } #pragma mark - block方法 - (void)asynBlock { /* 如果同时设置了block和实现了代理方法,请求过程中block和代理方法都会调用 调用顺序:代理方法 > block */ // 1.URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"]; // 2.创建一个请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.timeOutSeconds = 15; // 3.开始请求 [request startAsynchronous]; // 4.设置block监听 [request setStartedBlock:^{ NSLog(@"setStartedBlock"); }]; [request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) { NSLog(@"setHeadersReceivedBlock"); }]; [request setDataReceivedBlock:^(NSData *data) { NSLog(@"setDataReceivedBlock---%@",data); }]; [request setCompletionBlock:^{ NSLog(@"setCompletionBlock"); }]; [request setFailedBlock:^{ NSLog(@"setFailedBlock"); }]; } #pragma mark - 基本用法 #pragma mark - 异步请求 /* ///异步 - (void)asynGet { // 1.URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"]; // 2.创建一个请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.timeOutSeconds = 15; // 3.设置代理 request.delegate = self; // 4.开始请求 [request startAsynchronous]; } #pragma mark - ASIHTTPRequestDelegate代理方法 //1.开始发送请求 - (void)requestStarted:(ASIHTTPRequest *)request { NSLog(@"requestStarted"); } //2.接收到服务器的响应头信息 - (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders { NSLog(@"didReceiveResponseHeaders"); } //3.接收到服务器的实体数据(具体数据) //只要实现了这个代理方法,responseData\responseString就没有值 - 建议不要使用这个方法 - (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data { NSLog(@"didReceiveData----%@",data); } //4.服务器的相应数据 接收完毕 - (void)requestFinished:(ASIHTTPRequest *)request { NSLog(@"requestFinished---%@",[request responseData]); } //5.请求失败 - (void)requestFailed:(ASIHTTPRequest *)request { NSLog(@"requestFailed"); } */ #pragma mark - 同步请求 - (void)synGet { // 1.URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"]; // 2.创建一个请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.timeOutSeconds = 15; // 3.开始请求(这段代码会卡住,等待服务器给数据) [request startSynchronous]; //4.请求完毕 NSError *error = [request error]; if (error) { NSLog(@"请求失败---%@",error); } else { //NSData *data = [request responseData]; //NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSString *str = [request responseString]; NSLog(@"请求成功---%@",str); } } @end
二、文件下载与上传
// // ViewController.m // IOS_0215_ASI // // Created by ma c on 16/2/15. // Copyright © 2016年 博文科技. All rights reserved. // #import "ViewController.h" #import "ASIHTTPRequest.h" //使用ASIFormDataRequest,默认发送POST请求 #import "ASIFormDataRequest.h" @interface ViewController ()<ASIProgressDelegate> @property (nonatomic, strong) ASIFormDataRequest *request; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor cyanColor]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { // [self asynPOST]; // [self download]; [self upload]; } #pragma mark - 文件上传 - (void)upload { // 1.URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"]; // 2.创建一个请求 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; // 3.设置请求参数 [request setPostValue:@"123" forKey:@"username"]; [request setPostValue:@"123" forKey:@"pwd"]; // 4.设置文件参数 //如果知道文件路径最好用这个-AST内部会自动识别MIMEType NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MIMEType" ofType:@"png"]; [request setFile:filePath forKey:@"file"]; //如果文件数据是动态产生的,就用这个方法(拍照上传) //[request setData:<#(NSData *)#> forKey:<#(NSString *)#>]; // 4.设置上传进度代理 request.uploadProgressDelegate = self; // 5.设置请求 [request startAsynchronous]; // 6.监听完毕 __weak typeof(request) weakRequest = request; [request setCompletionBlock:^{ NSLog(@"setCompletionBlock-----%@",[weakRequest responseString]); }]; self.request = request; } - (void)dealloc { //此句代码为了防止:控制器销毁了,request还回来调用控制器的代理方法,引发野指针错误 [self.request clearDelegatesAndCancel]; } #pragma mark - 文件下载 - (void)download { // 1.URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos/minion_01.mp4"]; // 2.创建一个请求 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.timeOutSeconds = 15; // 3.设置文件缓存路径 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [caches stringByAppendingPathComponent:@"test.mp4"]; request.downloadDestinationPath = filePath; // 4.设置进度监听的代理(要想成为进度监听代理,最好实现ASIProgressDelegate的协议) request.downloadProgressDelegate = self; // 4.这个属性设置为YES,就会支持断点下载 request.allowResumeForFileDownloads = YES; // 4.如果要实现断点下载需要设置文件的临时路径 request.temporaryFileDownloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"test.temp"]; // 4.设置请求 [request startAsynchronous]; } - (void)setProgress:(float)newProgress { NSLog(@"setProgress----%lf",newProgress); } #pragma mark - POST请求 ///POST请求 - (void)asynPOST { // 1.URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"]; // 2.创建一个请求 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; request.timeOutSeconds = 15; // 3.设置请求参数(建议使用setPostValue) [request setPostValue:@"123" forKey:@"username"]; [request setPostValue:@"123" forKey:@"pwd"]; // 4.设置请求 [request startAsynchronous]; //设置block __weak typeof(request) weakRequest = request; [request setCompletionBlock:^{ NSLog(@"setCompletionBlock-----%@",[weakRequest responseString]); }]; } @end
相关文章推荐
- HttpUrlConnection缓存,仿微信朋友圈图片缓存效果
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- 网络---关于HTTP 304状态码的理解
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
- linux网络基础
- 常见HTTP错误代码大全
- Android 中访问HTTP
- 网络相关
- linux下网络驱动
- 蓝懿IOS网络服务器与客户端
- 2.2 常用工具类 网络 支撑 JSON
- aysnctask 处理网络事件
- android 5.0及以上https No peer certificate
- 建立网络链接传输数据 HttpClientUtil
- AsyncTask+GridView+BaseAdapter实现解析网络数据,图文混排。HttpUtils,JsonUtils等
- BP人工神经网络的C++实现
- IOS-网络(ASIHTTPRequest的使用简介)
- python实战系列之批量主机ping网络测试(七)
- 网络多线程你的理解有多少??
- netfilter-在内核态操作网络数据包