Разрешение CFHost DNS - Когда можно использовать синхронный API? - PullRequest
1 голос
/ 15 февраля 2010

Несколько месяцев назад я зашел на Tech Talk для разработчиков iPhone и спросил одного из гуру о том, что на iPhone нет NSHost. Некоторый код, который я портировал на iPhone, широко использовал NSHost в своем сетевом коде.

Мне сказали, что NSHost на iPhone, но он частный. Мне также сказали, что NSHost - это синхронный API, и я все равно не должен его использовать. (Если бы кто-нибудь мог объяснить, почему его не следует использовать в качестве бонуса, это было бы здорово.)

Я вижу предостережения об использовании синхронных API в основном потоке в том, что они будут блокироваться до завершения - и это никогда не будет хорошо с сетевым кодом, потому что есть так много факторов, которые могут заставить API блокировать поток значительное количество времени.

Мое решение состояло в том, чтобы написать оболочку для асинхронных функций разрешения CFHost.

Результат работает довольно хорошо, и я собираюсь опубликовать его в открытом доступе.

Но мой вопрос заключается в следующем: скажем, мое приложение разрешает имя хоста только один раз за запуск, во время фазы подключения, а затем кеширует его до конца сеанса. Во время разрешения показывается модальный экран, сообщающий пользователю «Соединение» с хорошим вертушкой.

Действительно ли имеет значение, является ли разрешение асинхронным ?? Пользователь все равно должен ждать, чтобы подключиться, и разрешение выполняется только при первом подключении. Последующие соединения используют кэшированный результат разрешения.

Когда можно быть синхронным и когда все должно быть асинхронным?

1 Ответ

2 голосов
/ 14 марта 2010

Ваш приятный спиннер не будет вращаться, так как пользовательский интерфейс также будет заблокирован во время синхронного вызова. Конечно, вы можете сделать вызов в отдельном потоке, но затем вы делаете то же самое, что и асинхронный вызов.

...