ASI
看到某某银行的客户端网络请求还是比较老的框架ASI、并且还是手动管理内存(非ARC),现在基本上网络请求用的都是AFN,所以对ASI已经很久没碰了,现在要重新整理把以前的东东都捡起来,方便以后如果再次遇到这种情况能够很快上手(祈祷在也碰不到了)
一:概念:全称是ASIHTTPRequest,江湖人称“HTTP终结者”,底层基于C的CFNetwork框架,运行效率很高功能十分强大,只可惜作者很早已不更新,所以一些潜在的bug无人去解决。这么好用的东西不更新,确实可惜。
(2)监听请求
a.第一种block的形式
// 1.URL NSURL *url = [NSURL URLWithString:@"http://xxxxxxxxxxx"]; // 2.创建一个请求对象 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; //超时时间 request.timeOutSeconds = 30; // 3.开始请求 [request startAsynchronous]; // 4.设置block监听 [request setStartedBlock:^{ NSLog(@"开始请求的时候调用"); }]; [request setCompletionBlock:^{ NSLog(@"请求完成的时候调用"); }]; [request setFailedBlock:^{ NSLog(@"请求失败的时候调用"); }]; //不要忘记在控制器销毁的时候要取消请求(这个很重要,要不然很容易报野指针错误问题) -(void)dealloc { [self.request clearDelegatesAndCancel]; }
讯享网
b.第二种:设置代理,不需要遵守ASIHTTPRequestDelegate协议,自定义代理方法

讯享网 // 1.URL NSURL *url = [NSURL URLWithString:@"http://xxxxxxxxxx"]; // 2.创建一个请求对象 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; //超时时间 request.timeOutSeconds = 30; // 3.开始请求 [request startAsynchronous]; // 4.设置监听方法 request.delegate = self; //请求开始的时候就会调用代理的start方法 [request setDidStartSelector:@selector(start:)]; //请求完成的时候就会调用代理的finish方法 [request setDidFinishSelector:@selector(finish:)];
c.第三种:就比较麻烦了,也是调用代理的方法,个人不建议用。前面两种就已经够了,不需要太在意。
- (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;
d.发送post请求
导入#import “ASIFormDataRequest.h”文件
ASIFormDataRequest的作用就是发送post请求
讯享网// 1.URL NSURL *url = [NSURL URLWithString:@"http://xxxxxxxxxx"]; // 2.创建一个请求对象 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; request.timeOutSeconds = 30; // 3.设置请求参数 [request setPostValue:@"lifufa" forKey:@"username"]; [request setPostValue:@"lifufa" forKey:@"pwd"]; // 4.开始请求 [request startAsynchronous]; // 5.设置监听方法 __weak typeof(request) weakRequest = request; [request setCompletionBlock:^{ NSLog(@"请求完毕--%@", [weakRequest responseString]); }]; [request setFailedBlock:^{ NSLog(@"请求失败--%@", [weakRequest responseString]); }]; 三:一些在开发中可能用到的方法 (1)设置请求超时后重试的次数 request.numberOfTimesToRetryOnTimeout = 3; // 重试3次 (2)当应用后台运行时,是否仍然继续处理网络请求 request.shouldContinueWhenAppEntersBackground = YES; (3)当正在请求时,是否要在状态栏显示联网状态(转圈圈) [ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:YES];
四:文件下载
// 1.URL NSURL *url = [NSURL URLWithString:@"http://xxxxxxxxxxx"]; // 2.创建一个请求对象 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // 3.设置文件的缓存路径 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString *filepath = [caches stringByAppendingPathComponent:@"test1.mp4"]; request.downloadDestinationPath = filepath; // 4.设置进度监听的代理(要想成为进度监听代理,最好遵守ASIProgressDelegate协议) request.downloadProgressDelegate = self; // 这个属性设置为YES,就会支持断点下载 request.allowResumeForFileDownloads = YES; // 如果要实现断点续传,需要设置一个文件的临时路径,NSTemporaryDirectory()代表temp路径 request.temporaryFileDownloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"test.temp"]; // 5.开始请求 [request startAsynchronous];
五:文件上传
讯享网// 2.创建一个请求对象 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; // 3.设置请求参数 [request setPostValue:@"lifufa" forKey:@"username"]; [request setPostValue:@"lifufa" forKey:@"pwd"]; // 设置文件参数 NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"]; // 如果知道文件路径,最好就用这个方法(因为简单) // ASI内部会自动识别文件的MIMEType [request setFile:file forKey:@"file"]; // 如果文件数据是动态产生的,就用这个方法.
// [request setData:<#(id)#> withFileName:<#(NSString )#> andContentType:<#(NSString )#> forKey:<#(NSString *)#>];
// 4.可以设置监听上传进度的代理 request.uploadProgressDelegate = self; // 5.开始请求 [request startAsynchronous]; // 6.监听完毕 __weak typeof(request) weakRequest = request; [request setCompletionBlock:^{ NSLog(@"%@", [weakRequest responseString]); }];
“`
了解以上这些应该就能解决老的项目请求问题,这个框架确实很牛逼。比起AFN来说,如果作者能够更新,本人还是更喜欢ASI.随着swift的普及,ASI将会加速推出历史舞台。一个崭新的网络框架已经普及,并得到大家认可。回首过往可惜的同事更多的是尊重与敬佩!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/73523.html