技术开发 频道

iPhone开发之ASIHTTPRequest

  注意,我们为request设置委托,这样,我们就可以接收消息,无论request完成了还是失败了。

  这是一个最简单的创建一个异步的request的方法,并且,它会运行在当前进程里。对于更复杂的情况,你可能想创建一个队列,我们可以覆盖下一个(youmight want to create your own queue, which is what we’ll covernext.这里翻译的非常勉强….英语差啊…);

  Using aqueue

  使用一个队列

  这个示例依然是做同样的事情,但是,我们将为我们的request添加一个NSOperationQueue对象。

  使用NSOperationQueue(或ASINetWorkQueue,见下面示例)将给你对异步request更多的控制。当使用队列的时候,只有确定数量的request可以同时运行。如果你添加的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'是我们的控制器保留NSOperationQueue的产物。

  我们设置selectors,selectors将在request成功或者失败之后被执行。如果你不设置这些,将会调用默认的(requestFinished和requestFailed).

0
相关文章