серия вызовов асинхронных запросов http

#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];

и так далее……….. Вы можете передавать свои запросы этими методами асинхронно.