ASIHTTP是否支持多线程? 如果确定,我希望每个线程链接到一个UIProgressbar,我该如何构建代码?
由于
InterDev中
答案 0 :(得分:3)
Yups,ASIHttpRequest可以一次处理多个请求。请参阅帮助documentation并注意此部分。
使用队列
这个例子做了同样的事情 再次,但我们创造了一个 NSOperationQueue请求我们。
使用NSOperationQueue(或 ASINetworkQueue,见下文)给你 更多地控制异步 要求。使用队列时,只有一个 可以运行一定数量的请求 同一时间。如果你添加更多 请求比队列的要求 maxConcurrentOperationCount属性, 请求将等待其他人 在他们开始之前完成。
(IBAction为)grabURLInTheBackground:(ID)发送方 {if(![self queue]){ [self setQueue:[[[NSOperationQueue alloc] init] autorelease]]; } NSURL * url = [NSURL URLWithString:@“http://allseeing-i.com”]; ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
[请求setDelegate:self];
[请求 setDidFinishSelector:@selector(requestDone :)]; [请求 setDidFailSelector:@selector(requestWentWrong :)]; [[self queue] addOperation:request]; // queue是一个NSOperationQueue}(void)requestDone:(ASIHTTPRequest *)request {NSString * response = [request responseString]; }
(无效)requestWentWrong:(ASIHTTPRequest *)请求{NSError * error = [request error]; }
在上面的示例中,'queue'是一个 保留了NSOperationQueue属性 我们的控制器。
我们正在设置自定义选择器 将在请求时调用 成功还是失败。如果你没有设置 这些,默认值(requestFinished: 和requestFailed :)将被用作 在上一个例子中。
处理成功和失败 多个请求
如果你需要处理成功而且 许多不同类型的失败 请求,您有几种选择:
- 如果您的请求属于同一种广泛类型,但您想要 区分它们,你可以设置 userInfo NSDictionary属性 每个请求都有您自己的自定义数据 你可以读完你的/ 失败的委托方法。
- 如果你需要处理完全不同的成功和失败 每个请求的方式,设置不同 setDidFinishSelector / 每个请求的setDidFailSelector
- 对于更复杂的情况,或者您要解析响应的位置 在后台,创造一个最小的 每个ASIHTTPRequest的子类 请求类型和覆盖 requestFinished:和failWithProblem:。
醇>
希望这有帮助。
谢谢,
Madhup
答案 1 :(得分:1)
在此处查看示例代码:http://allseeing-i.com/ASIHTTPRequest/How-to-use
它支持异步请求(多线程),您可以使用ASINetworkQueue来监控其进度。