我在运行后台选择器之前以同步的方式使用NSURLConnection,所以当我转移到ASIHTTPRequest时,我对此框架做了同样的事情。
那么,做以下事情是不是一个坏主意?
// From another method
[self performSelectorInBackground:@selector(callDatasource) withObject:nil];
- (NSData *)callDatasource {
NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:someURLthatIamusing];
[request setTimeOutSeconds:50.0];
[request startSynchronous];
NSError *error = [request error];
NSData *returnedData;
if (!error) {
returnedData = [request responseData];
} else {
// do something with error
}
[self performSelectorOnMainThread:@selector(done) withObject:nil waitUntilDone:NO];
[apool release];
return returnedData;
}//end
使用ASIHTTPRequest和异步方法以及委托方法有什么好处?
答案 0 :(得分:2)
根据经验,当在辅助线程上使用ASIHTTPRequest
同步请求时,有时会发生奇怪的事情:状态栏中的下载活动图标在下载完成后不会消失,这是我不时注意到的一个问题。我过去没有遇到任何重大问题,但我现在使用异步方法而不是你的方法。 ASI异步方法本质上是一个广泛使用的库,比我自己的实现更加高度测试。
使用异步方法有很多优点 - 你提到了委托方法,但ASI的最新版本实际上也支持块,这是一个很大的飞跃(处理多个同步调用曾经是一点点由于共享的委托方法(或每个异步调用的唯一委托)导致的痛苦。但是使用块你现在可以完全摆脱委托。我发现它们非常有用。另外如果你使用多个贡献者,它可以使可读性更容易。
答案 1 :(得分:0)
此外,通过执行Async,您可以通过setProgressDelegate命令更轻松地跟踪进度。