#iphone
#iPhone
Вопрос:
Мне нужно выполнить серию вызовов асинхронных запросов http в цикле for . Но тогда мне нужно было бы дождаться завершения загрузки для получения ответа, прежде чем отправлять следующий запрос без сбоев. Итак, используя NSNotification (или что-нибудь еще), как я могу справиться с этим.
Ответ №1:
Когда вы выполняете асинхронный запрос, вам не нужно ждать. Однако вам необходимо правильно обрабатывать ответы. Вы можете проверить библиотеку ASIHTTPRequest, которая в настоящее время, похоже, является фаворитом разработчиков на SO. Если вам приходится ждать ответа, значит, вы делаете это не асинхронно.
Что касается использования NSNotification, лучшим, более чистым и простым подходом было бы использование протоколов. Таким образом, вы реализуете делегат и отправляете следующий запрос при каждом вызове метода делегата.
Ответ №2:
Вы хотите выполнить несколько последовательных запросов в фоновом режиме и дождаться завершения каждого запроса перед запуском следующего. Это ничем не отличается от запуска чего-либо другого в фоновом режиме. Вот кое-что, что я на скорую руку придумал:
[self performSelectorInBackground:@selector(runRequests) ...];
- (void)runRequests
{
for (int i = 0; i < self.urls.count; i ) {
NSURL *url = [self.urls objectAtIndex:i];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous]; // Note: not asynchronous
// Handle response ...
ALog(@"%@ completed", url);
}
[[NSNotificationCenter defaultCenter]
postNotificationName:@"all requests completed!" object:nil];
}
Здесь я использую ASIHTTRequest, но использование NSURLRequest в этом случае работает так же хорошо. Важно то, что запрос выполняется до завершения.
Ответ №3:
Вы можете сделать это с помощью потоков следующим образом
[NSThread detachNewThreadSelector:@selector (myMethod1) toTarget:self с объектом:nil];
[NSThread detachNewThreadSelector:@selector (myMethod2) Итоговая цель:self с OBJECT:nil];
[NSThread detachNewThreadSelector:@selector (myMethod3) toTarget:self с объектом:nil];
и так далее……….. Вы можете передавать свои запросы этими методами асинхронно.