ASIHttpRequest——接收的使用方法
2011-08-25 12:33
232 查看
创建一个同步的request:
最简单的方式来使用ASIHTTPRequest。调用startSynchronous执行该请求的信息将在同一个线程内完成,返回状态为成功或者失败。
当Response为字符串时,调用[
request responseString]
当Response为数据时,调用[request responseData]
例子:
创建一个异步的request:
和同步的例子差不多,但是异步是在后台执行
注意我们设置request的委托,是为了我们能接收当request成功或者失败的通知。
这是一种简单的异步请求,他将返回一个全局NSOperationQueue。对于一个复杂的操作(如跟踪多个request的进度),你应该创建自己的队列,我们将在后面讲解。
使用blocks
注意,用_block 来修饰request。这样告诉block 不是retain这个request,防止循环retain。这样做的目的是retain是这一个bolck;
注:关于这个block翻译的不准。如有需要请再查阅其他资料。
使用队列:
这个例子同样做了同一件事情,但是我们为request建立了一个NSOperationQueue。
用一个NSOperationQueue(或者ASINetworkQueue,稍后会看到)会对异步请求有更多的操作。当使用队列可以有一定数量的request在同一时间执行。如果你加入超过 maxConcurrentOperationCount 这个属性的数量时,在队列外request就会等待队列里的request完成后才开始。
在上面的例子中“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
最简单的方式来使用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
相关文章推荐
- ASIHttpRequest——接收的使用方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- ASIHTTPRequest详细介绍,使用方法
- 火狐 httpRequest 扩展插件传json 数据,php接收打印使用方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- ASIHttpRequest网络请求第三方类库使用方法详解
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- ASIHttpRequest block在ARC下使用时出错circle retain的问题及解决方法
- ASIHTTPRequest的使用方法
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- ASIHTTPRequest的使用方法
- ASIHTTPRequest使用过程中遇到的问题及解决办法
- iPhone开发笔记(16)使用ASIHTTPRequest和ASIDownloadCache实现本地缓存
- iOS--ASIHTTPRequest类库的添加和使用
- IOS ASIHTTPRequest类库简介和使用说明