it-swarm.com.de

was ist der Vorteil von Alamofire gegenüber NSURLSession/NSURLConnection für die Vernetzung?

Kann mir jemand beim Verständnis dieser Frage helfen: Was ist der Vorteil der Verwendung von Alamofire gegenüber NSURLSession/NSURLConnection?

Was sind die Unterschiede zwischen NSURLSession und NSURLConnection?

19

NSURLConnection ist Apples alte API für das Networking (z. B. HTTP-Anfragen stellen und Antworten erhalten), während NSURLSession ihre neue ist. Letzteres ist eine höhere Stufe und ist im Allgemeinen viel einfacher und erfordert weniger Boilerplate-Code, um von den meisten Anwendungsentwicklern verwendet zu werden. Grundsätzlich gibt es keinen Grund, den ersteren zu verwenden, außer in altem Code, den Sie nicht aktualisieren möchten. 

Ein bisschen Geschichte: Bevor NSURLSession herauskam, wurde AFNetworking, eine Drittanbieter-Bibliothek, zum De-facto-Standard für das Networking in Objective C, da sie eine einfachere und bequemere API als NSURLConnection bereitstellte In diesen Tagen wird stattdessen NSURLSession verwendet. Derselbe Entwickler erstellte später eine ähnliche Bibliothek für Swift, genannt AlamoFire, um "die schnelle Vorgehensweise" zu nutzen (anstatt nur Swift-Bindungen zu AFNetworking hinzuzufügen). Etwa zur gleichen Zeit kam NSURLSession heraus und es schien ziemlich offensichtlich, dass Apple sich von AFNetworking inspirieren ließ und wollte, dass seine neue Netzwerk-API genauso praktisch ist, um damit zu arbeiten - im Großen und Ganzen glaube ich, dass sie Erfolg hatten. Dies bedeutet, dass die Verwendung von AFNetworking anstelle von NSURLConnection bisher für die meisten Entwickler die einzige vernünftige Wahl war. Heutzutage sind die Vorteile der Verwendung von AFNetworking oder AlamoFire gegenüber NSURLSession jedoch viel geringer, und für die meisten Entwickler, die neue Projekte starten, würde ich nur empfehlen Beginnen Sie mit NSURLSession und schauen Sie sich AlamoFire nur an, wenn sie das Gefühl haben, dass sie Einschränkungen oder Unannehmlichkeiten haben, die groß genug sind, um das Hinzufügen einer weiteren Abhängigkeit zu rechtfertigen.

10

Alamofire basiert auf NSURLSession und enthält weniger Codezeilen für REST - Interaktionen mit (POST/GET/PUT/etc). Sie erhalten "90%" des Weges, aber wenn Sie besonders spezialisierte Netzwerkanrufe durchführen müssen, müssen Sie NSURLSession verwenden.

Beispiel: Ein einfacher Alamofire-Aufruf, der JSON erhält

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 ist nun veraltet und NSURLSession ist der neue Standard. https://developer.Apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html

2
Ben

Lassen Sie mich zunächst den Unterschied zwischen NSURLSession und NSURLConnection beantworten

  1. NSURLConnection: Wenn wir eine offene Verbindung mit NSURLConnection haben und sagen, dass Sie Ihre App schließen, ist alles, was wir erhalten oder gesendet haben, verloren

  2. NSURLSession: Hier wird dieser Fall mit Hilfe einer App-Delegat-Methode behandelt

    application:handleEventsForBackgroundURLSession:completionHandler

Hier ist ein Link Ich habe gefunden, der hilfreich sein könnte, um den Unterschied zwischen den beiden besser zu erklären

kommen wir zu Ihrer ersten Frage nach dem Vorteil von Alamofire gegenüber der Standard-Framework-Klasse und teilen Sie einfach meine Erfahrung mit dem, was ich bisher getan habe. Machen Sie sich also bereit, da es eine lange Lektüre ist.

Für mich ist die Daumenregel niemals, das Framework zu umgehen, es sei denn, Sie haben einen triftigen Grund, unabhängig davon, welche Technologie Sie verwenden.

Grund dafür ist, dass ich in der Vergangenheit eine Bibliothek von Drittanbietern verwendet habe und das mit den neuesten Updates von iOS nicht gut beendet wurde. Nehmen wir an, wenn Sie eine kostenpflichtige App haben und Ihre Bibliothek von Drittanbietern nicht mehr funktioniert, wird die App Ihres Kunden an Wert verlieren Am Ende erhältst du negative Kommentare zum App Store.

Bevor Sie eine Bibliothek von Drittanbietern verwenden, sollten Sie unbedingt die angegebenen Fragen überprüfen

  1. was ist die Häufigkeit von Updates?
  2. wie viele offene Fehler sind offen?
  3. Lohnt es sich wirklich, oder verwenden Sie die Framework-Klassen?
  4. Was ist die Lizenz dieser Bibliothek?

Um auf die Frage zurückzukommen, habe ich Alamofire in einem Projekt verwendet, bei dem nur get, post und put Anrufe gemacht wurden und einige Offline-Synchronisierungsfunktionen hatten.

Wenn ich jetzt darüber nachdenke, hätte ich meine eigene Klasse mit URLSessions erstellen und entsprechend reagieren können. Es war nicht nötig, Alamofire zu verwenden, da ich hier nichts Besonderes machte.

Ich glaube, dass dies alles durch das Standardframework erreicht werden konnte als durch die Verwendung eines Drittanbieters, aber ich habe es trotzdem verwendet. Warum habe ich es benutzt? Ich weiß nicht, vielleicht war ich neugierig, aber eine Lektion, die ich hier gelernt habe, hätte ich durch die Verwendung von Framework-Klassen erreichen können. Wenn wir sagen, dass die Bibliothek nicht mehr funktioniert, hätte ich keine Ahnung, warum sie es getan hat und tun würde Sie müssen sich auf einen Fix des Betreuers/Autors dieser Bibliothek verlassen, der einen Monat, eine Woche oder einen Tag dauern kann

Ich habe einmal eine Bibliothek für ein Feature verwendet, das ich wollte, aber das gleiche Feature hatte einen offenen Defekt und es wurde nie aktualisiert. Also habe ich am Ende meinen eigenen benutzerdefinierten gemacht und bis heute funktioniert es gut, also gehen Sie alle offenen Defektabschnitte durch Vermeiden Sie ungeplante Überraschungen.

Wie in der obigen Antwort erwähnt, sollten Sie nur Komponenten von Drittanbietern verwenden und nur dann, wenn Sie mit dem Standard-Framework Einschränkungen aufweisen und noch bevor Sie dies tun, überprüfen Sie, wann diese Bibliothek zum letzten Mal aktualisiert wurde, welche Lizenz sie hat und wie viele offene Fehler gibt es.

1
NSDumb

Für Swift 3.0 und höher eignet sich Alamofire am besten, da es gut optimiert und auch wiederverwendbar ist und viele Build-In-Funktionen bietet. Alofofire erfordert einen ähnlichen Ansatz, indem ein Router erstellt wird, indem ein Protokoll (URLRequestConvertible) verwendet wird. Unter der Haube fordert Alamofire ein Singleton-Pattern, das auf einer NSURLSessionConfiguration basiert.

0
Krishna Thakur

Der Vorteil ist, dass es eine höhere Abstraktionsebene gibt, sodass Sie weniger Codezeilen schreiben können. Es gibt jedoch immer noch keine offizielle Unterstützung für Codable. Die Aktualisierung der Swift-Version kann einige Nachteile mit sich bringen, aber ich denke, dies sollte sich mit der ABI-Stabilität in Swift 5 verbessern. Außerdem müssen Sie auf Sicherheitslücken achten.

Zurück in den Tagen Objective C und NSURLConnection machten dann Bibliotheken wie AFNetworking sehr viel Sinn, aber mit Swift, Codable und URLSession denke ich, dass es weniger Gründe gibt, Alamofire zu verwenden.

0
Some One