синхронная сеть - здесь вы делаете сетевой запрос и блокируете ожидание ответа.
основной поток - синхронная сеть в целом не идеальна, но она вызывает определенные проблемы, если вы делаете это в главном потоке. Помните, что основной поток отвечает за запуск пользовательского интерфейса. Если вы заблокируете основной поток в течение значительного промежутка времени, пользовательский интерфейс становится неприемлемо не отвечающим.
длительные тайм-ауты - если сеть просто исчезает (например, пользователь едет в поезде, который идет в туннель), любой ожидающий сетевой запрос не будет выполнен, пока не истечет некоторое время ожидания. Большинство тайм-аутов сети измеряются в минутах, это означает, что заблокированный синхронный сетевой запрос в основном потоке может удерживать пользовательский интерфейс без ответа в течение нескольких минут за один раз.
Попытка избежать этой проблемы за счет сокращения таймаута сети не является отличная идея. В некоторых ситуациях для успешного выполнения сетевого запроса может потребоваться много секунд, и, если вы всегда используете тайм-аут раньше времени, вы вообще никогда не добьетесь прогресса.
watchdog - чтобы удержать пользователя отзывчивый интерфейс, iOS включает в себя сторожевой механизм. Если ваше приложение не отвечает на определенные события пользовательского интерфейса (запуск, приостановка, возобновление, завершение) вовремя, сторожевой таймер убьет ваше приложение и сгенерирует отчет о сбое тайм-аута сторожевого таймера. Количество времени, которое дает вам сторожевой таймер, официально не задокументировано, но оно всегда меньше, чем время ожидания сети.
асинхронная сеть. Лучшее решение этой проблемы - асинхронный запуск сетевого кода. Асинхронный сетевой код имеет ряд преимуществ, не в последнюю очередь это то, что он позволяет безопасно обращаться к сети, не беспокоясь о потоках.
синхронная сеть во вторичном потоке - если это чрезвычайно сложно запустите ваш сетевой код асинхронно (возможно, вы работаете с большой переносимой кодовой базой, которая предполагает синхронную сеть), вы можете избежать сторожевого таймера, запустив ваш синхронный код во вторичном потоке.