Раньше в iOS было два типа запросов: sendSynchronousRequest и sendAsynchronousRequest. Однако оба они устарели в iOS9. Рекомендуемая замена для обоих случаев: 1 и 2 почти такой же:
[[NSURLSession sharedSession] dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
//A piece of code after response completes.
}] resume];
Итак, в недавней iOS больше нет разницы между этими двумя? Почему было принято такое решение?
Ответ 1 · рейтинг 1 · Rob
Как правило, когда Apple пересматривает/обновляет API-интерфейсы, они отказываются от синхронных методов, которые потенциально могут блокировать поток, и вводят только асинхронные представления. И, где это возможно, эти новые асинхронные методы также можно отменить. Эти два NSURLConnection удобных метода заслуживают того, чтобы их удалили.
Хотя я не припоминаю, чтобы Apple явно сформулировала эту стратегию, можно сделать логический вывод об этом из эволюции многих их фреймворков (NSURLSession, фреймворк Contacts, фреймворк Photos и т. д.). Я уверен, что они делают это, потому что синхронные API-интерфейсы настолько восприимчивы к неправильному использованию, что почти провоцируют плохие шаблоны программирования (в частности, блокировку основного потока).