Мне нужно сделать несколько веб-запросов и хочу, чтобы они были быстрыми. Объем данных очень мал, но сервер использует некоторое время для ответа, поэтому я думаю об использовании нескольких потоков. Проблема заключается в том, как обрабатывать возвращаемые значения. Я не знаю, работает ли это:Соберите возвращаемое значение из нескольких потоков
- (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]? Должен ли я использовать какие-то замки или что-то еще?
EDIT
Я сделал некоторое чтение и интересно, если это то, что мне нужно сделать?
NSLock * myLock = [[NSLock alloc] init];
-(void)findAuthorForBookDidFinishWithAuthor:(NSString *)authorName andBookID:(NSString *)bookID
{
[myLock lock];
[[self bookList]setValue:authorName forKey:bookID];
[myLock unlock];
}
Pls комментарий, не только «минус один» меня, даже если я полный придурок :-) Минус один не говорит мне много. (За исключением того, что я далеко)