您的位置:首页 > 理论基础 > 计算机网络

ASIHTTPRequest的使用——队列请求

2016-06-15 22:44 573 查看
队列请求提供了一个对异步请求更加精准丰富的控制。

如,可以设置在队列中,同步请求的连接数。

往队列里添加的请求实例数大于maxConcurrentOperationCount时,请求实例将被置为等待,直到前面至少有一个请求完成并出列才

被放到队列里执行。

也适用于当我们有多个请求需求按顺序执行的时候(可能是业务上的需要,也可能是软件上的调优),仅仅需要把maxConcurrentOperationCount 设为“1”。

- (void)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:)];
// queue is an NSOperationQueue
[[self queue] addOperation:request];
}

- (void)requestDone:(ASIHTTPRequest *)request
{
NSString *response = [request responseString];
}

- (void)requestWentWrong:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}

请求队列上下文

a、可以设置一个上下文(userInfo)到request对象中,当请求响应完后可以通过访问request对象的userInfo获取里面的信息

b、为每一个请求实例设置不同的setDidFinishSelector / setDidFailSelector的回调方法

c、子类化ASIHTTPRequest,重写requestFinished: 与 failWithProblem:方法

ASINetworkQueues, 它的delegate提供更为丰富的功能

提供的更多的回调方法如下:

a、requestDidStartSelector,请求发起时会调此方法,你可以在此方法中跟据业务选择性的设置request对象的deleaget。

b、requestDidReceiveResponseHeadersSelector,当接受完响应的Header后设计此方法,这个对下载大数据的时候相当有用,你可以在方法里做更多业务上的处理。

c、requestDidFinishSelector,请求并响应成功完成时调用此方法

d、requestDidFailSelector,请求失败

e、queueDidFinishSelector,整个队列里的所有请求都结束时调用此方法。

注意:添加到队列中其实并不能执行请求,只有调用[queue go]才会执行;一个正在运行中的队列,并不需要重复调用[queue go]。

默认情况下,队列中的一个请求如果失败,它会取消所有未完成的请求。

可以设置[queue  setShouldCancelAllRequestsOnFailure:NO]来修 正。

队列请求中需要注意的是,如果你取消了一个请求,队列会自动取消其它所有请求。

如果只想取消一个请求,可以设置队列:[queue setShouldCancelAllRequestsOnFailure:NO]; 

如果想明确取消所有请求:[queue cancelAllOperations];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: