ASIHTTPRequest框架是优秀的第三方Objective-C的HTTP框架,支持Mac OS X和iOS下的HTTP开发。

一、ASIHTTPRequest框架的安装和配置

(1)首先要在项目工程中导入相关的文件,包括:ASIHttpRequest文件夹和Reachability文件夹。

(2)要导入相关的支持类库和框架。包括:

CFNetwork.framework
SystemConfiguration.framework
MobileCoreServices.framework

libz.dylib

(3)由于ASIHTTPRequest是不支持ARC的,所以在添加了ARC特性的项目中就会出现ARC报错,解决的方法也很简单,对ASIHTTPRequest的相关文件添加ARC特性,做法就是在target中选择Build Phases,再选择compile sources中ASIHTTPRequest的文件,双击弹出对话框,添加参数“-fno-objc-arc”。问题解决。

二、同步请求

首先需要导入ASIHTTPRequest头文件。

  1. NSString *urlString = @"*****";
  2. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];
  3. [request startSynchronous];
  4. NSError *error = [request error];
  5. if (!error) {
  6. NSData *data = [request responseData];
  7. NSString *string = [request responseString];
  8. }

这是一段简单的同步请求的代码。其中的responseData返回的是二进制数据,而responseString返回的是文本数据。

三、异步请求

附注:我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好。因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的很多。等待过程中在状态栏上会出现网络等待指示器的经典旋 转小图标,而使用ASIHTTPRequest异步请求就实现这些效果,不用自己额外编写代码。

异步请求需要实现代理方法

  1. NSString *urlString = @"*****";
  2. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];
  3. [request setDelegate:self];
  4. [request startAsynchronous];

需要实现两个代理方法:

  1. - (void)requestFinished:(ASIHTTPRequest *)request {
  2. NSData *data = [request responseData];
  3. NSString *string = [request responseString];
  4. }
  5. - (void)requestFailed:(ASIHTTPRequest *)request {
  6. NSError *error = [request error];
  7. if (error) {
  8. NSLog(@"request failed");
  9. }
  10. }

这两个方法是默认的回调方法,从服务器获取数据成功就回调第一个方法,否则回调第二个方法。当然也可以自己定义回调方法。

  1. [request setDidFinishSelector:@selector(requestSuccess:)];
  2. [request setDidFailSelector:@selector(requestError:)];

然后再实现这两个自定义的回调方法。

  1. - (void)requestSuccess:(ASIHTTPRequest *)request {
  2. NSData *data = [request responseData];
  3. NSString *string = [request responseString];
  4. }
  5. - (void)requestError:(ASIHTTPRequest *)request {
  6. NSError *error = [request error];
  7. if (error) {
  8. NSLog(@"request failed");
  9. }
  10. }

在异步请求中往往为了代码更加简洁可以使用代码块(block),在代码块中指定回调方法。

  1. NSString *urlString = @"*****";
  2. __weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];
  3. [request setCompletionBlock:^{
  4. // Use when fetching text data
  5. NSString *responseString = [request responseString];
  6. // Use when fetching binary data
  7. NSData *responseData = [request responseData];
  8. }];
  9. [request setFailedBlock:^{
  10. NSError *error = [request error];
  11. if (error) {
  12. NSLog(@"request failed");
  13. }
  14. }];
  15. [request startAs

最新文章

  1. C#判断数组是否为空
  2. LintCode 392 House Robber
  3. Hibernate中易错地方的总结
  4. hdu 4764 Stone (巴什博弈,披着狼皮的羊,小样,以为换了身皮就不认识啦)
  5. Java中多线程的使用!!
  6. leetCode 53.Maximum Subarray (子数组的最大和) 解题思路方法
  7. iOS 16进制颜色和UIcolor的转换
  8. 【JSONKit】序列化Dictionary崩溃
  9. Java容器的概要
  10. VNC VIEWER的使用集锦
  11. python-广度优先搜索
  12. 数论:px+py 不能表示的最大数为pq-p-q的证明
  13. pycharm pip安装包
  14. tigervnc-server 无法启动问题
  15. 自定义data-*
  16. python基础一数据类型之字典
  17. ADNI数据集相关概念整理
  18. SVM计算过程,对偶形式,核函数
  19. JavaScript DOM 編程藝術(2版) 綜合實例Band js代碼
  20. 如何在windows下用IDA优雅调试ELF

热门文章

  1. uoj#269. 【清华集训2016】如何优雅地求和(数论)
  2. [Xcode 实际操作]九、实用进阶-(30)为IAP(支付方式)内购项目添加测试账号,测试内购功能
  3. Hackintosh
  4. VLAN-4-在路由器上配置Trunk
  5. Redis的分布式锁
  6. 《http和https协议》
  7. Codeforces Round #388 (Div. 2) D
  8. [aspnetcore]asp.net core程序部署到Ubuntu中的路径问题
  9. Jquery多选框互相内容交换
  10. .Net应用导入、导出Excel文件