Разница между синхронным и асинхронным в последних версиях iOS

Раньше в 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 больше нет разницы между этими двумя? Почему было принято такое решение?


person Darius Miliauskas    schedule 22.11.2015    source источник
comment
NSURLConnection устарел, и эти методы были частью этого класса.   -  person Rajan Maheshwari    schedule 22.11.2015
comment
взгляните на этот stackoverflow.com/questions/24114093/   -  person Rajan Maheshwari    schedule 22.11.2015
comment
Спасибо, Раджан, я вижу, что это устарело, ваш ответ полезен, но я также хочу увидеть эти изменения с синхронной и асинхронной точек зрения, поэтому я задал вопрос как таковой.   -  person Darius Miliauskas    schedule 22.11.2015


Ответы (1)


Как правило, когда Apple пересматривает/обновляет API-интерфейсы, они отказываются от синхронных методов, которые потенциально могут блокировать поток, и вводят только асинхронные представления. И, где это возможно, эти новые асинхронные методы также можно отменить. Эти два NSURLConnection удобных метода заслуживают того, чтобы их удалили.

Хотя я не припоминаю, чтобы Apple явно сформулировала эту стратегию, можно сделать логический вывод об этом из эволюции многих их фреймворков (NSURLSession, фреймворк Contacts, фреймворк Photos и т. д.). Я уверен, что они делают это, потому что синхронные API-интерфейсы настолько восприимчивы к неправильному использованию, что почти провоцируют плохие шаблоны программирования (в частности, блокировку основного потока).

person Rob    schedule 22.11.2015