Это на самом деле довольно хороший вопрос - настолько хороший, что я фактически использую его в интервью для разработчиков iOS, когда моя компания набирает:
Почему пример доступности Apple составляет сотни строк, когда вы можете просто использовать одну строку, чтобы проверить, реагирует ли URL-адрес?
Во-первых, достижимость сети на самом деле очень, очень сложна . Это гораздо больше, чем просто проверка URL. Подумайте о следующих примерах:
Пользователь подключен к сети 3G, но израсходовал свои данные, поэтому каждый
запрос перенаправляет на сайт перевозчика.
Пользователь подключен к публичной сети Wi-Fi, которая требует
аутентификация / логин, поэтому запрос перенаправляет на страницу входа в систему
Последний пример невероятно распространен - это происходит постоянно. Но если бы вы использовали initWithContentsOfURL
, ваше приложение представило бы, что у вас есть подключение, а на самом деле это не так: вам просто вернули бы содержимое страницы, на которую вас перенаправила сеть.
Это одна из причин, по которой код Apple является более сложным, чем вы могли подумать на первый взгляд. Вы не должны просто спрашивать "могу ли я получить этот URL" , но "- это данные, возвращаемые с этого URL, которые, как я ожидаю, будут ".
Но это действительно только верхушка айсберга. Помимо этого, доступность делает намного больше - например, у меня может быть приложение, которое должно загружать много информации, скажем, на 50 МБ. Было бы плохой идеей просто загрузить 50 МБ данных, если пользователь подключен к сети 3G без их согласия - особенно если он в роуминге или на ограниченном тарифном плане. Так что Reachability также сообщит вам , какой тип соединения установлен пользователем: EDGE, 3G, WiFi и т. Д. (* Примечание: см. Примечание ниже, это, вероятно, не лучший совет).
ReadMe.txt внутри Reachability расскажет вам немного больше о том, что код может и не может делать.
К сожалению, в Интернете слишком много людей, которые не осознают, что существует множество повседневных сценариев, в которых initWithContentsOfURL
будет возвращать действительный ответ, но у пользователя не будет подключения. [Подобные сообщения в блоге] [1] индексируются в Google, и люди предполагают, что это приемлемая замена: это не так!
Одна из причин, по которой я задаю этот вопрос при наборе персонала, заключается в том, что он может показать, что разработчик не просто думает изнутри - как вы и многие другие разработчики, моя первая реакция, когда я увидел пример кода Reachability, была «вау, это кажется слишком сложно для чего-то очень простого ". Но, надеюсь, этот ответ каким-то образом убедит вас в обратном.
Редактировать: Обязательно примите к сведению комментарии Стивена ниже. Он поднимает некоторые моменты, которые мой ответ не учел (т. Е. Горячие точки MiFi), и приводит веские доводы в пользу того, что достижимость не обязательно является вершиной кодирования небес, которой она кодируется. Во многих случаях разработчики будут модифицировать Reachability со своими собственными улучшениями и т. П.