Ich habe ASIHTTPRequest geliebt und war traurig, dass es so weit war. Der Entwickler von ASI hatte jedoch Recht, ASIHTTPRequest ist so groß und aufgebläht geworden, dass selbst er keine Zeit darauf verwenden konnte, es mit den neuesten Funktionen von iOS und anderen Frameworks gleichzusetzen. Ich ging weiter und benutze jetzt AFNetworking.
Trotzdem muss ich sagen, dass AFNetworking viel instabiler ist als ASIHTTP, und für die Dinge, für die ich es verwende, muss es verfeinert werden.
Ich muss häufig HTTP-Anforderungen an 100 HTTP-Quellen senden, bevor ich meine Ergebnisse auf dem Bildschirm anzeigen kann, und ich habe AFHTTPNetworkOperation in eine Operationswarteschlange gestellt. Bevor alle Ergebnisse heruntergeladen werden, möchte ich in der Lage sein, alle Vorgänge in der Vorgangswarteschlange abzubrechen und dann den Ansichtscontroller zu schließen, der die Ergebnisse enthält.
Das funktioniert nicht immer.
Ich bekomme zu zufälligen Zeiten Abstürze mit AFNetworking, während mit ASIHTTPRequest diese Operationen einwandfrei funktionierten. Ich wünschte, ich könnte sagen, welcher bestimmte Teil von AFNetworking abstürzt, da es immer wieder an verschiedenen Punkten abstürzt (meistens zeigt der Debugger jedoch auf die NSRunLoop, die ein NSURLConnection-Objekt erstellt). AFNetworking muss also ausgereift sein, um so vollständig wie ASIHTTPRequest zu sein.
Außerdem unterstützt ASIHTTPRequests die Clientauthentifizierung, die AFNetworking derzeit fehlt. Die einzige Möglichkeit, dies zu implementieren, besteht darin, AFHTTPRequestOperation in eine Unterklasse zu unterteilen und die Authentifizierungsmethoden von NSURLConnection zu überschreiben. Wenn Sie sich jedoch mit NSURLConnection beschäftigen, werden Sie feststellen, dass das Einfügen von NSURLConnection in einen NSOperation-Wrapper und das Schreiben von Abschlussblöcken nicht so schwierig ist, wie es sich anhört, und Sie werden darüber nachdenken, was Sie davon abhält, Bibliotheken von Drittanbietern zu sichern.
ASI verwendet einen ganz anderen Ansatz, da es CFNetworking (auf C basierende Frameworks auf niedrigerer Ebene) verwendet, um das Herunterladen und Hochladen von Dateien zu ermöglichen, NSURLConnection vollständig zu überspringen und Konzepte zu berühren, vor denen die meisten von uns OS X- und iOS-Entwicklern zu viel Angst haben. Dadurch erhalten Sie ein besseres Hoch- und Herunterladen von Dateien, sogar Webseiten-Caches.
Welches bevorzuge ich? Es ist schwer zu sagen. Wenn AFNetworking genug reift, wird es mir besser gefallen als ASI. Bis dahin kann ich nicht anders, als ASI zu bewundern und die Art und Weise, wie es zu einem der am häufigsten verwendeten Frameworks aller Zeiten für OS X und iOS wurde.
EDIT:
Ich denke, es ist Zeit, diese Antwort zu aktualisieren, da sich die Dinge nach diesem Beitrag etwas geändert haben.
Dieser Beitrag wurde vor einiger Zeit geschrieben und AFNetworking ist genug gereift. Vor 1-2 Monaten hat AF ein kleines Update für POST-Vorgänge veröffentlicht, das meine letzte Beschwerde über das Framework war (ein kleiner Fehler beim Beenden der Leitung war der Grund dafür, dass echoneste Uploads mit AF fehlgeschlagen sind, aber mit ASI einwandfrei abgeschlossen wurden). Die Authentifizierung ist bei AFnetworking kein Problem, da Sie bei komplexen Authentifizierungsmethoden den Vorgang in Unterklassen unterteilen und Ihre eigenen Anrufe tätigen können. AFHTTPClient macht die Basisauthentifizierung zum Kinderspiel. Durch die Unterklasse AFHTTPClient können Sie in kurzer Zeit einen gesamten Service-Consumer erstellen.
Ganz zu schweigen von den absolut notwendigen UIImage-Ergänzungen, die AFNetworking anbietet. Mit Blöcken und benutzerdefinierten Vervollständigungsblöcken und einem cleveren Algorithmus können Sie Tabellenansichten mit asynchronem Herunterladen von Bildern und Füllen von Zellen ganz einfach erstellen, während Sie in ASI Operationswarteschlangen für die Bandbreitendrosselung erstellen und darauf achten mussten, die Operationswarteschlange entsprechend abzubrechen und fortzusetzen Sichtbarkeit der Tabellenansicht und ähnliches. Die Entwicklungszeit solcher Operationen wurde halbiert.
Ich liebe auch die Erfolgs- und Misserfolgsblöcke. ASI hat nur einen Abschlussblock (der eigentlich der Abschlussblock von NSOperation ist). Sie mussten überprüfen, ob Sie nach Abschluss einen Fehler hatten, und entsprechend handeln. Bei komplexen Webdiensten können Sie sich in allen "Wenns" und "Anderen" verlieren. In AFNetworking sind die Dinge viel einfacher und intuitiver.
ASI war für seine Zeit großartig, aber mit AF können Sie die Art und Weise, wie Sie Webdienste vollständig handhaben, auf eine gute Weise ändern und skalierbare Anwendungen einfacher machen. Ich glaube wirklich, dass es keinen Grund mehr gibt, bei ASI zu bleiben, es sei denn, Sie möchten auf iOS 3 und darunter abzielen.
ASIFallbackToCacheIfLoadFailsCachePolicy
sehr gut ist. Und ich denke, AFNetworking hat keine dauerhafte Cache-Unterstützung. Das ist ein No-Go für mich.