it-swarm.com.ru

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

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

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

19
Srikanth Adavalli

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

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

10
Martin Gjaldbaek

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

2
Ben

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

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

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

    application:handleEventsForBackgroundURLSession:completionHandler

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

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

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

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

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

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

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

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

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

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

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

1
NSDumb

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

0
Krishna Thakur

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

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

0
Some One