Ios 从多个线程收集返回值
我需要做多个网络请求,并希望它是快速的。数据量非常小,但服务器需要一些时间来回答,因此我考虑使用多线程。问题是如何处理返回值。我不知道这是否有效:Ios 从多个线程收集返回值,ios,multithreading,Ios,Multithreading,我需要做多个网络请求,并希望它是快速的。数据量非常小,但服务器需要一些时间来回答,因此我考虑使用多线程。问题是如何处理返回值。我不知道这是否有效: - (void)findAuthorsForBookIDs:(NSArray*)bookIDs { for (NSString* thisBookID in bookIDs) { [NSThread detachNewThreadSelector:@selector(findAuthorForBook:) toTarg
- (void)findAuthorsForBookIDs:(NSArray*)bookIDs
{
for (NSString* thisBookID in bookIDs)
{
[NSThread detachNewThreadSelector:@selector(findAuthorForBook:) toTarget:self withObject:thisBookID];
}
}
-(void)findAuthorForBook:(NSString*)thisBookID
{
NSString *downloadString = [NSString stringWithFormat:
@"http://somewebsite.com/Mediator?bookIDNo=%@",
thisBookID];
NSURL *downloadUrl = [NSURL URLWithString:downloadString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:downloadUrl];
NSError *error;
NSURLResponse *response;
NSData *urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
NSString *html2;
if (urlData)
{
html2 = [[NSString alloc] initWithData: urlData encoding: NSISOLatin1StringEncoding];
}
[self findAuthorForBookDidFinishWithAuthor:html2 andBookID:thisBookID];
}
-(void)findAuthorForBookDidFinishWithAuthor:(NSString *)authorName andBookID:(NSString *)bookID
{
[[self bookList]setValue:authorName forKey:bookID];
}
我不知道[self bookList]是否会处理这个问题?我应该用锁还是别的什么
编辑
我读了一些书,想知道这是否是我需要做的
NSLock*myLock=[[NSLock alloc]init]
-(void)findAuthorForBookDidFinishWithAuthor:(NSString *)authorName andBookID:(NSString *)bookID
{
[myLock lock];
[[self bookList]setValue:authorName forKey:bookID];
[myLock unlock];
}
请评论,即使我是个十足的混蛋,也不要只是“减一”我:-)减一并不能告诉我太多。(除此之外,我还远远不够)使用线程而不是
NSURLConnection
执行此操作对性能没有好处。您可以在没有线程的情况下同时打开多个请求。然而,连接到服务器的延迟通常是移动设备上最大的性能障碍。如果你能保持一个单一的连接,事情会进展得更快<如果您允许,code>NSURLConnection将使用HTTP/1.1连接自动完成其中一些操作(即,如果您不通过自己的线程来解决问题)。但是,同时打开多个连接不太可能对您有很大帮助,除非服务器对每个连接的响应速度非常慢,但仍然能够并行处理多个连接(这种情况非常罕见)
您还可以查看,其中包括几个用于帮助您管理同时请求的工具