Iphone 在单独的NSThread上实现异步下载(NSURLConnection)?
这听起来可能很奇怪,但请耐心听我说。我有6-7个API调用,它们逐个向服务器发出请求。我想在一个单独的线程中实现这些调用。但在执行此操作时,即使在管理单独的nsrunlop之后,也不会调用任何委托方法(NSURLConnection) ([[NSRunLoop currentRunLoop]运行模式:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];)Iphone 在单独的NSThread上实现异步下载(NSURLConnection)?,iphone,nsurlconnection,Iphone,Nsurlconnection,这听起来可能很奇怪,但请耐心听我说。我有6-7个API调用,它们逐个向服务器发出请求。我想在一个单独的线程中实现这些调用。但在执行此操作时,即使在管理单独的nsrunlop之后,也不会调用任何委托方法(NSURLConnection) ([[NSRunLoop currentRunLoop]运行模式:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];) 是否有人能为我提供替代方法,对现有功能进行相同或任何更正???改用。它的使用比NS
是否有人能为我提供替代方法,对现有功能进行相同或任何更正???改用。它的使用比NSURLConnection要容易得多。谷歌很快就抛出了这样一个问题:他正在使用字典来管理多个请求,为每个NSURLConnection使用一个单独的线程,这已经是多线程的了,这是一个坏主意。它只是毫无意义地使用系统资源,挫败了NSURLConnections以最佳方式管理连接的尝试。但是,如果您没有收到代理消息,那么它确实起作用,因为您做错了。与其寻找替代方法,不如尝试找出运行循环问题的根源。我正在使用AsittpRequest执行类似的操作。通过以下代码更改downloadAllIcons方法以满足您的需求
[NSThread detachNewThreadSelector:@selector(downloadAllIcons:) toTarget:self withObject:xmlData];
-(void) downloadAllIcons:(NSData *)_xmlData
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *IconList= PerformXMLXPathQuery(_xmlData,@"//icon");
[[NSUserDefaults standardUserDefaults] setObject:IconList forKey:@"IconList"];
for (int i=0; i<[IconList count]; i++) {
if ([[NSUserDefaults standardUserDefaults] objectForKey:[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]]==nil) {
NSData * responseData=[self downloadProccessedImage:[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]];
if(responseData)
[[NSUserDefaults standardUserDefaults] setObject:responseData forKey:[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]];
//NSLog(@"%@",[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]);
}
}
[pool release];
}
-(id) downloadProccessedImage:(NSString *)_URL
{
NSData *response=nil;
NSURL *url = [NSURL URLWithString:_URL];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setTimeOutSeconds:60];
[ASIHTTPRequest setShouldThrottleBandwidthForWWAN:YES];
[request startSynchronous];
NSError *error = [request error];
if (!error)
{
response = [request responseData];
}
return response;
}
[NSThread detachNewThreadSelector:@selector(downloadAllIcons:)to target:self with object:xmlData];
-(无效)下载Allicons:(NSData*)\u xmlData
{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
NSArray*IconList=PerformXMLXPathQuery(_xmlData,@”//icon);
[[NSUserDefaults standardUserDefaults]setObject:IconList forKey:@“IconList”];
对于(int i=0;iHi JFoulkes,我遇到的障碍与多个NSURLConnections无关。相反,它是关于在一个单独的NSThread中管理连接。正如我前面提到的,请求是按顺序一个接一个地进行的。我在谷歌上搜索了它,找到了类似NSOperation的东西,但它没有给我确切的方法?