ASIHTTPRequest 同步和异步请求

在使用ASIHTTPRequest之前,请确认已经正确安装,然后在需要应用它的代码文件头部,加入:

#import “ASIHTTPRequest.h”

这样就可以在代码中使用ASIHTTPRequest相关的类。

发起一个同步请求

同步意为着线程阻塞,在主线程中使用此方法会使应用Hang住而不响应任何用户事件。所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替(下面会讲到)。

-
 (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];

  }

}

a, 用requestWithURL快捷方法获取ASIHTTPRequest的一个实例
b, startSynchronous 方法启动同步访问,
c, 由于是同步请求,没有基于事件的回调方法,所以从request的error属性获取错误信息。
d, responseString,为请求的返回NSString信息。

创建一个异步请求

异步请求的好处是不阻塞当前线程,但相对于同步请求略为复杂,至少要添加两个回调方法来获取异步事件。
下面异步请求代码完成上面同样的一件事情:

-
 (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];

}
a,与上面不同的地方是指定了一个 "delegate",并用startAsynchronous来启动网络请求。
b,在这里实现了两个delegate的方法,当数据请求成功时会调用requestFinished,请求失败时(如网络问题或服务器内部错误)会调用requestFailed。




你可能感兴趣的:(ios,Objective-C,xcode,ASIHTTPRequest)