в чем преимущество использования Alamofire над NSURLSession/NSURLConnection для сетевого взаимодействия?

Может ли кто-нибудь помочь мне в понимании этого вопроса: в чем преимущество использования Alamofire над NSURLSession/NSURLConnection?

Каковы различия между NSURLSession и NSURLConnection?

Ответы

Ответ 1

NSURLConnection - это старый API Apple для работы в сети (например, создание HTTP-запросов и получение ответов), в то время как NSURLSession является их новым. Последний является более высоким уровнем и, как правило, намного проще и требует меньшего количества шаблонов кода для большинства разработчиков приложений.

Немного истории: до выхода NSURLSession сторонняя библиотека AFNetworking стала фактическим стандартом для создания сетей в Objective C, поскольку она предоставила простой и удобный API, чем NSURLConnection (который был оберткой вокруг - я думаю в наши дни он обертывает NSURLSession). Тот же разработчик позже создал аналогичную библиотеку для Swift, названную AlamoFire, чтобы полностью воспользоваться преимуществами "Быстрого способа делать вещи" (вместо того, чтобы просто добавлять привязки Swift к AFNetworking). Примерно в то же самое время вышло NSURLSession, и казалось, что Apple была вдохновлена AFNetworking и хотела сделать свой новый сетевой API таким же удобным для работы - по большому счету, я думаю, что они преуспели. Это означает, что, хотя ранее использование AFNetworking вместо NSURLConnection было единственным разумным выбором для большинства разработчиков, сегодня преимущества использования AFNetworking или AlamoFire над NSURLSession намного меньше, и для большинства разработчиков, запускающих новые проекты, я бы рекомендовал просто начните с использования NSURLSession и изучите только AlamoFire, если они почувствуют, что они столкнулись с некоторыми ограничениями или неудобствами, которые достаточно велики, чтобы оправдать добавление другой зависимости.

Ответ 2

Alamofire построен поверх NSURLSession и меньше строк кода для взаимодействия REST с (POST/GET/PUT/etc). Это даст вам "90%" пути, но если вам нужно делать суперспециализированные сетевые вызовы, вам нужно будет использовать NSURLSession.

Пример: простой вызов Alamofire, который получает JSON

Alamofire.request(.GET, "https://www.google.com/",encoding: .JSON).responseJSON {response in
        if(response.result.error == nil){
            print(response.data)
        }else{
            print("Network Error")
        }
}

NSURLConnection теперь устарел, и NSURLSession - новый стандарт. https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html

Ответ 3

Для Swift 3.0 и выше Alamofire лучше всего потому, что он хорошо оптимизирован, а также многократно используется, и у него также есть множество функций Build.Alamofire требует аналогичного подхода, поскольку в нем создается маршрутизатор, соответствующий протоколу, URLRequestConvertible. Под капотом Alamofire вызывает одноэлементный шаблон, построенный на вершине NSURLSessionConfiguration.

Ответ 4

Сначала позвольте мне ответить на разницу между NSURLSession и NSURLConnection

  1. NSURLConnection: если у нас есть открытая связь с NSURLConnection и, допустим, вы закрываете приложение, тогда все, что мы получили или отправили, потеряно

  2. NSURLSession: здесь этот случай обрабатывается с помощью метода делегирования приложения

    application:handleEventsForBackgroundURLSession:completionHandler

Здесь найдена ссылка, которая может быть полезна для лучшего объяснения различий между двумя

откройте свой первоначальный вопрос о преимуществах Alamofire над классом каркаса по умолчанию, и я просто передаю свой опыт тому, что я сделал до сих пор, поэтому приготовьтесь, поскольку он долго читается.

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

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

Я советую перед использованием любой сторонней библиотеки, пожалуйста, убедитесь, что вы проверяете данные вопросы

  1. какова частота обновлений?
  2. сколько открытых ошибок открыто?
  3. Действительно ли это стоит использовать, или вы можете использовать классы фреймворка?
  4. Какая лицензия на эту библиотеку?

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

Теперь, подумав об этом, я мог бы сделать свой собственный класс с помощью URLSessions и обработать ответ соответственно, не нужно было использовать Alamofire, поскольку я не делал ничего особенного здесь.

Я считаю, что все это было достигнуто по умолчанию, чем использование третьей стороны, но я все равно ее использовал. Почему я его использовал, не знаю, может быть, мне было любопытно, но урок, который был здесь извлечен, я мог бы добиться того же самого, используя классы фреймворка, если, скажем, библиотека перестает работать, я бы не знал, почему это так и было должны полагаться на исправление от опекуна/автора этой библиотеки, которая может занять месяц, неделю, день, кто знает

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

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

Ответ 5

Преимущество состоит в том, что существует более высокий уровень абстракции, поэтому вы можете писать меньше строк кода. Однако официальная поддержка Codable по-прежнему отсутствует. Обновление версии Swift может иметь свои недостатки, но я думаю, что это должно улучшить стабильность ABI в Swift 5. Кроме того, вы должны помнить об уязвимостях безопасности.

Вернувшись в дни Objective C и NSURLConnection, тогда библиотеки, такие как AFNetworking, имели большой смысл, но с Swift, Codable и URLSession, тогда я думаю, что для использования Alamofire меньше дел.