ASIHTTPRequest的使用——队列请求

来源:互联网 发布:手机摇骰子软件 编辑:程序博客网 时间:2024/05/18 03:59
队列请求提供了一个对异步请求更加精准丰富的控制。

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

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