我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好。因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的很多。等待过程中在状态栏上会出现网络等待指示器的经典旋 转小图标,而使用ASIHTTPRequest异步请求就实现这些效果,不用自己额外编写代码。
ASIHTTPRequest 和ASIFormDataRequest两个请求类都可以发送异步请求,ASIFormDataRequest继承了 ASIHTTPRequest异步请求方法,所以我们重点介绍ASIHTTPRequest的异步请求。异步请求后通过回调委托对象的方 法:requestFinished:和requestFailed:实现。修改主视图控制器MasterViewController.m的 startRequest方法如下:
-(void)startRequest { NSString *strURL = [[NSString alloc] initWithFormat: @”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”, @”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”]; NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self]; ① [request startAsynchronous]; ② } - (void)requestFinished:(ASIHTTPRequest *)request ③ { NSData *data = [request responseData]; NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; [self reloadView:resDict]; } - (void)requestFailed:(ASIHTTPRequest *)request ④ { NSError *error = [request error]; NSLog(@”%@”, [error localizedDescription]); }
第 ①行代码[request setDelegate:self]设置委托对象为self,然后在第②行[request startAsynchronous]发起异步请求,服务器端返回成功则回调第③行的requestFinished:方法,失败则回调第④行的 requestFailed:方法,它们的参数都是ASIHTTPRequest类型。这两个方法是默认的回调方法,我们也可以自定义回调方法。因此上面 的代码也可以改为如下形式:
-(void)startRequest { … … [request setDidFinishSelector:@selector(requestSuccess:)]; [request setDidFailSelector:@selector(requestError:)]; [request startAsynchronous]; } - (void)requestSuccess:(ASIHTTPRequest *)request { NSData *data = [request responseData]; NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; [self reloadView:resDict]; } - (void)requestError:(ASIHTTPRequest *)request { NSError *error = [request error]; NSLog(@”%@”, [error localizedDescription]); }
通过请求对象的setDidFinishSelector:方法指定要回调成功方法,setDidFailSelector:方法指定要回调的失败方法。
在异步请求中往往为了使代码更加整洁可以使用代码块(Block),在代码块中指定回调方法。使用了代码的主视图控制器MasterViewController.m的startRequest方法如下:
-(void)startRequest { NSString *strURL = [[NSString alloc] initWithFormat: @”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”,@”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”]; NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]]; __weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; ① [request setCompletionBlock:^{ ② NSData *data = [request responseData]; ③ NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; [self reloadView:resDict]; }]; [request setFailedBlock:^{ ④ NSError *error = [request error]; NSLog(@”%@”, [error localizedDescription]); }]; [request startAsynchronous]; }
相关推荐
本篇文章主要介绍了iOS - ASIHTTPRequest 网络请求 ,详细的介绍了 ASIHTTPRequest的使用,具有一定的参考价值,有兴趣的可以了解一下。
IOS应用源码之【应用】-ASIHTTPRequest-强大的HTTP包装开源项目.rar
前两年IOS应用源码-主要是用于毕业设计学习的。
【应用】-ASIHTTPRequest-强大的HTTP包装开源项目.7z
【应用】★★★★★-ASIHTTPRequest-强大的HTTP包装开源项目.zipIOS应用例子源码下载【应用】★★★★★-ASIHTTPRequest-强大的HTTP包装开源项目.zipIOS应用例子源码下载 1.适合学生学习研究参考 2.适合个人学习研究...
1.改良版的 ASIHTTPRequest 不建议iOS 新手使用 2.有一定的iOS经验你会发现这个版本挺不错的! 谨慎使用,派别之争的 就别喷了无意义!
iOS 网络异步假期 AsiHttPRequest的应用
ASIHttpRequest是iOS开发必备的网络数据请求包,使用方便,唯一的缺点是非ARC的,需要设置项目中的非ARC类
iOS ASIHttpRequest 请求https
使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 API,外号 “HTTP终结者”,用 Objective-C 编写,运行效率很高...
全称是ASIHTTPRequest,外号“HTTP终结者”,可以实现http网络请求,功能十分强大。
ASIHTTPRequest网络请求集合,直接引入到项目中使用。
ASIHTTPRequest是简单易用的,它封装了CFNetwork API。使得与Web服务器通信变得更简单。它是用Objective-C编写的,可以在MAC OS X和iPhone应用中使用。 它适用于执行基本的HTTP请求和互动(或者说是反馈)。...
│ ├── Request:网络请求 │ ├── Models:数据模型 │ ├── View:界面,xib或者storyboard之类的文件 │ ├── Supporting Files:一些支持文件 │ └── Controllers │ ├─...
ios开发框架 ASIHttpRequest 资源来源于网上 非原创
使用iOS SDK中的HTTP网络请求API,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,
ASI-HTTP-Request是通过CFNetwork API访问Web服务的一个开源封装类库包,...ASIHTTPRequest使用REST格式与Web服务进行通信,既支持基本的Http请求格式,也通过ASIFormDataRequest类可以很方便地提交POST数据和文件。
在网络访问时,一般都建议用异步访问,但是异步访问的话,需要传入delegate,并处理回调。不利于将所有的网络访问的方法集中到一个类中,所以我采用同步访问的方式。后来产品部们要求网络访问可以取消,但是ASIHTTP ...
使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用...
IOS应用源码之【应用】ASIHTTPRequest-强大的HTTP包装开源项目.rar