Несколько месяцев назад я зашел на Tech Talk для разработчиков iPhone и спросил одного из гуру о том, что на iPhone нет NSHost. Некоторый код, который я портировал на iPhone, широко использовал NSHost в своем сетевом коде.
Мне сказали, что NSHost на iPhone, но он частный. Мне также сказали, что NSHost - это синхронный API, и я все равно не должен его использовать. (Если бы кто-нибудь мог объяснить, почему его не следует использовать в качестве бонуса, это было бы здорово.)
Я вижу предостережения об использовании синхронных API в основном потоке в том, что они будут блокироваться до завершения - и это никогда не будет хорошо с сетевым кодом, потому что есть так много факторов, которые могут заставить API блокировать поток значительное количество времени.
Мое решение состояло в том, чтобы написать оболочку для асинхронных функций разрешения CFHost.
Результат работает довольно хорошо, и я собираюсь опубликовать его в открытом доступе.
Но мой вопрос заключается в следующем: скажем, мое приложение разрешает имя хоста только один раз за запуск, во время фазы подключения, а затем кеширует его до конца сеанса. Во время разрешения показывается модальный экран, сообщающий пользователю «Соединение» с хорошим вертушкой.
Действительно ли имеет значение, является ли разрешение асинхронным ?? Пользователь все равно должен ждать, чтобы подключиться, и разрешение выполняется только при первом подключении. Последующие соединения используют кэшированный результат разрешения.
Когда можно быть синхронным и когда все должно быть асинхронным?