Я думаю, что использование синхронного API NSURLConnection - хорошая идея.У вас есть несколько других вариантов.Можно было бы написать объект-оболочку вокруг NSURLConnection, который использовал асинхронные API-интерфейсы NSURLConnection, чтобы вы получили полезную информацию, которую предоставляют асинхронные обратные вызовы API, включая ход загрузки, вы можете легко продолжать обновлять свой пользовательский интерфейс во время выполнения запроса, нопредставляет свой собственный синхронный метод для выполнения всего, что вам нужно.По сути, что-то вроде:
@implementation MyURLConnectionWrapper
- (BOOL)sendRequestWithError:(NSError **)error
{
error = error ? error : &(NSError *){ nil };
self.finishedLoading = NO;
self.connectionError = nil;
self.urlConnection = [][NSURLConnection alloc] init...]
while (!self.finishedLoading)
{
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate: [NSDate distantFuture]];
}
if (self.connectionError != nil)
{
*error = self.connectionError;
return NO;
}
return YES;
}
@end
(Это все напечатано на макушке головы и сильно сокращено, но должно дать вам основную идею.)
Вы также можете сделатьчто-то вроде запуска каждого запроса в методе завершения делегирования для предыдущего, полностью отказывающегося от использования очереди последовательной отправки:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
{
[self sendNextRequest];
}
В любом случае вам нужно подумать о том, как правильно обрабатывать ошибки соединения.Я успешно использовал оба подхода в разных местах.