ASIHttpRequest——接收的使用方法

创建一个同步的request:

最简单的方式来使用ASIHTTPRequest。调用startSynchronous执行该请求的信息将在同一个线程内完成,返回状态为成功或者失败。

当Response为字符串时,调用[ request responseString]  

当Response为数据时,调用[request responseData]

例子:

- (IBAction)grabURL:(id)sender
{
  NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  [request startSynchronous];
  NSError *error = [request error];
  if (!error) {
    NSString *response = [request responseString];
  }
}


创建一个异步的request:

和同步的例子差不多,但是异步是在后台执行

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}
 
- (void)requestFinished:(ASIHTTPRequest *)request
{
   // Use when fetching text data
   NSString *responseString = [request responseString];
 
   // Use when fetching binary data
   NSData *responseData = [request responseData];
}
 
- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}

注意我们设置request的委托,是为了我们能接收当request成功或者失败的通知。

这是一种简单的异步请求,他将返回一个全局NSOperationQueue。对于一个复杂的操作(如跟踪多个request的进度),你应该创建自己的队列,我们将在后面讲解。


使用blocks

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setCompletionBlock:^{
      // Use when fetching text data
      NSString *responseString = [request responseString];
 
      // Use when fetching binary data
      NSData *responseData = [request responseData];
   }];
   [request setFailedBlock:^{
      NSError *error = [request error];
   }];
   [request startAsynchronous];
}

注意,用_block 来修饰request。这样告诉block 不是retain这个request,防止循环retain。这样做的目的是retain是这一个bolck;

注:关于这个block翻译的不准。如有需要请再查阅其他资料。


使用队列:

这个例子同样做了同一件事情,但是我们为request建立了一个NSOperationQueue。

用一个NSOperationQueue(或者ASINetworkQueue,稍后会看到)会对异步请求有更多的操作。当使用队列可以有一定数量的request在同一时间执行。如果你加入超过 maxConcurrentOperationCount 这个属性的数量时,在队列外request就会等待队列里的request完成后才开始。

- (IBAction)grabURLInTheBackground:(id)sender
{
   if (![self queue]) {
      [self setQueue:[[[NSOperationQueue alloc] init] autorelease]];
   }
 
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request setDidFinishSelector:@selector(requestDone:)];
   [request setDidFailSelector:@selector(requestWentWrong:)];
   [[self queue] addOperation:request]; //queue is an NSOperationQueue
}
 
- (void)requestDone:(ASIHTTPRequest *)request
{
   NSString *response = [request responseString];
}
 
- (void)requestWentWrong:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}

在上面的例子中“queue”是自己controller 的 NSOpeartionQueue的一个实例。

我们自己设置的自定义的方法来处理请求成功或者失败。如果你不设置将会调用默认的方法(requestFinished或者requestFailed)。


在委托方法里对多个请求成功或失败进行处理:

如果你要处理不同类型的请求,有以下几种方法:

1.如果你的请求都是同一类型,但是你想区分它们,你可以用NSDictionary来存储request。然后在对应的委托方法中得到它们。还可以用tag属性来替代。这两个属性都不会发送到服务器。

2.如果你想以完全不同处理的处理方式处理成功或失败,对每个request 设置对应的setDidFinishSelector setDidFailSelector方法。

3.对于更复杂的request,或者你想在后台解析response。你可以自己写一个ASIHttpRequest的子类,重写requestFinished: and failWithError:


关于ASINetworkQueues

ASINetworkQueues是NSOperationQueue的一个子类,他提供了一些额外的功能。

他主要提供了 跟踪整个队列上传或者下载进程:

requestDidStartSelector:

每当队列里的一个request开始时调用此方法。



http://allseeing-i.com/ASIHTTPRequest/How-to-use


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值