NSURLSession oder NSURLConnection - iOS 6 support
Ich brauche, um eine Verbindung zu meinem server um einige JSON
Daten und ich habe zur Unterstützung iOS 6
und iOS 7
.
Sollte ich zwei Klassen? Mit NSURLSession
für iOS 7
und mit NSURLConnection
für iOS 6
? Oder soll ich einfach verwenden NSURLConnection
für beide?
- prüfen Sie diesen link aus, um zu sehen, ein tolles tutorial auf NSURLSession: raywenderlich.com/51127/nsurlsession-tutorial
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welchen Vorteil würde Sie gewinnen durch die Schaffung von zwei separaten Klassen, die im wesentlichen die gleiche Sache? Wenn Sie nicht verwenden können, NSURLSession, weil es nur unterstützt iOS 7, und Sie können die gleiche Funktionalität mit NSURLConnection, die funktioniert, dann verwenden Sie einfach NSURLConnection. Haben Sie weniger code zu pflegen.
Große Frage. In der Tat, ich hatte die gleiche Frage und erforscht es durchaus ein wenig, und ich denke, dies ist ein guter Ort, um ein Protokoll verwenden (ein.k.ein. Benutzeroberfläche in anderen Sprachen). Dies ist, basierend auf dem Zitat "- Programm auf eine Schnittstelle, nicht auf eine Implementierung" von der berühmten "Gang of Four" - Patterns Buch. Ich denke es ist am besten, um zu versuchen und den code für die Zukunft, damit ich mich nicht gehämmert werden, wenn Sie entscheiden, missbilligen etwas (was nicht der Fall hier, aber man weiß ja nie).
Anstelle von Klassen schreiben, schreiben ein Protokoll, das definiert die Methoden, die Sie verwenden möchten, und erstellen Sie dann 2 verschiedene Klassen, die bei der Umsetzung dieser Methoden. In Ihrem app würde man einen Zeiger, der auf jede Klasse, die alle, die Protokolle Methoden-und dann jede implementierende Klasse können unabhängig von frameworks/libraries/anderen code, den Sie wollen, dass passieren.
Als ein Beispiel, Sie können eine Server-Protokoll wie diese:
erstellen und dann ein RestServer Klasse wie folgt aus:
erstellen und dann eine andere Klasse wie SoapServer:
Code, Ihre Haupt-app zu verwenden nur einen Zeiger auf die Schnittstelle, und jetzt können Sie die swap-Klassen ohne änderung Ihrer Haupt-code:
Nun können Sie änderungen an server-Klassen, Wann immer Sie wollen und haben nie zu gehen auf die Jagd nach allen Orten, in Ihrem code, wo Sie Aufrufe an callService:withData:. DIES IST DER VORTEIL DER PROGRAMMIERUNG VON SCHNITTSTELLEN!
Ich verwendet, Rest vs. Soap, weil ich dachte, die Leute zu neueren Objective-C könnte Sie verstehen das besser, aber in deinem Fall würden Sie vielleicht einen ConnectionServer vs SessionServer oder sowas.
Anderen guten read auf Programmierung Schnittstellen-Protokolle finden Sie hier: https://stackoverflow.com/a/384067/504873
Wenn Sie
NSURLCredentialPersistenceForSession
wenn Sie haben, um in einem Windows-Authentifizierung Netzwerk...dann mitNSURLConnection
erstellen mehrere Probleme für Sie. Ich werde durch den Schmerz jetzt und haben kommen zu dem Schluss, dass ich beide brauchen zur Unterstützung von iOS 7. Im Grunde, wenn SieNSURLConnection
undwillSendRequestForAuthenticationChallenge
Sie werden feststellen, dass in iOS 7, Ihre Sitzung endet mit einem Geist von seinen eigenen (scheint wie ein 30-Sekunden-Geist-Spanne). Also, wenn Sie auf bestehen einer Berechtigung zum Zugriff auf weitere SOAP oder was auch immer, welcome to the terror dome! Ich werde berichten zurück, um Sie mit code-wenn ich eine glatte Lösung.Zum Zeitpunkt des Schreibens, NSURLConnection ist veraltet in OS X 10.11 und iOS 9.0 aber meine Apps brauchen, um Unterstützung für OS X 10.7 und iOS 6.
So, jetzt HABEN Sie zu verwenden NSURLSession für laufende Projekte, SONDERN unterstützen auch die jetzt veraltet NSURLConnection-Klasse für unterstützte ältere OS-Versionen!
Ich würde in diesen Tagen Stimmen Sie für TenaciousJay Lösung mit Compiler-Warnung Unterdrückung rund um die NSURLConnection-Klasse Umsetzung.
Den Vorteil, du würdest Sie gewinnen durch die Schaffung von zwei separaten Klassen, die im wesentlichen die gleiche Sache ist, dass Sie schließlich SCHNEIDEN Sie die alte, veraltete Lösung, wenn Sie endlich drop-support für ältere OS-Versionen.
Mein code Entscheidung zur Verwendung einer Klasse oder die andere würde sich nicht auf einige Klasse Eigentum, sondern auf das Ergebnis eines Makro-wie:
für iOS oder OS X: