ASIHTTPRequest的使用——队列请求

队列请求提供了一个对异步请求更加精准丰富的控制。

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

往队列里添加的请求实例数大于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];



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值