私はASIHTTPRequestを愛し、それがうまくいくのを見て悲しかった。しかし、ASIの開発者は正しかった。ASIHTTPRequestは非常に大きく膨れ上がっているため、iOSや他のフレームワークの最新機能に対応するために時間を割くことができなかった。私は次に進み、AFNetworkingを使用します。
とは言っても、AFNetworkingはASIHTTPよりもはるかに不安定であり、私がそれを使用するためには、改良が必要です。
結果を画面に表示する前に、100個のHTTPソースにHTTPリクエストを送信する必要があることが多く、AFHTTPNetworkOperationを操作キューに入れました。すべての結果がダウンロードされる前に、操作キュー内のすべての操作をキャンセルして、結果を保持しているビューコントローラーを閉じることができるようにしたいと思います。
それは常にうまくいくとは限りません。
AFNetworkingではランダムにクラッシュしますが、ASIHTTPRequestではこの操作は問題なく機能していました。AFNetworkingのどの特定の部分がクラッシュしているのかがわかります。異なるポイントでクラッシュし続けます(ただし、これらのほとんどの場合、デバッガはNSURLConnectionオブジェクトを作成するNSRunLoopをポイントします)。そのため、AFNetworkingは、ASIHTTPRequestと同様に完全であると見なされるために成熟する必要があります。
また、ASIHTTPRequestsはクライアント認証をサポートしていますが、現時点ではAFNetworkingにはありません。これを実装する唯一の方法は、AFHTTPRequestOperationをサブクラス化し、NSURLConnectionの認証メソッドをオーバーライドすることです。ただし、NSURLConnectionに関与し始めると、NSOperationConnectionラッパー内にNSURLConnectionを配置して完了ブロックを書き込むのはそれほど難しいことではないことに気づき、サードパーティのライブラリをダンプしない理由を考え始めます。
ASIは、CFNetworking(Cに基づく低レベルの基盤フレームワーク)を使用してダウンロードとファイルのアップロードを可能にし、NSURLConnectionを完全にスキップして、ほとんどのOS XおよびiOS開発者の概念に触れているため、まったく異なるアプローチを使用しています。このため、Webページのキャッシュでさえ、ファイルのアップロードとダウンロードが向上します。
どちらを選びますか?言うのが難しい。AFNetworkingが十分に成熟すれば、ASIよりも気に入ってくれるでしょう。それまでは、ASIと、それがOS XとiOSで常に最もよく使用されるフレームワークの1つになったことを賞賛せざるを得ません。
編集:
この投稿の後で状況が少し変わったので、この回答を更新する時がきたと思います。
この投稿は少し前に書かれたもので、AFNetworkingは十分に成熟しています。1〜2か月前に、フレームワークに関する私の最後の不満であったPOST操作の小さな更新をAFが投稿しました(小さな行末エラーが、エコーネストアップロードがAFで失敗したが、ASIで正常に完了した理由でした)。認証はAFnetworkingの問題ではありません。複雑な認証方法の場合、操作をサブクラス化して独自の呼び出しを行うことができ、AFHTTPClientは基本認証を簡単なものにするためです。AFHTTPClientをサブクラス化することで、サービス全体を短時間で作成できます。
AFNetworkingが提供する絶対に必要なUIImage追加は言うまでもありません。ブロックとカスタム補完ブロック、およびいくつかの巧妙なアルゴリズムを使用すると、非同期の画像ダウンロードとセルの塗りつぶしでテーブルビューをかなり簡単に作成できますが、ASIでは、帯域幅スロットリング用の操作キューを作成し、それに従って操作キューをキャンセルして再開する必要がありました。テーブルビューの可視性など。そのような操作の開発時間は半分になりました。
成功と失敗のブロックも大好きです。ASIには完了ブロックしかありません(実際にはNSOperationの完了ブロックです)。完了時にエラーが発生したかどうかを確認し、それに応じて行動する必要がありました。複雑なWebサービスの場合、すべての「if」と「elses」で迷子になる可能性があります。AFNetworkingでは、物事ははるかにシンプルで直感的です。
ASIは当時としては素晴らしかったですが、AFを使用すると、Webサービスを完全に適切に処理する方法を変更でき、スケーラブルなアプリケーションをより簡単に作成できます。iOS 3以下をターゲットにしたいのでなければ、ASIを使い続ける理由はまったくないと私は本当に信じています。
ASIFallbackToCacheIfLoadFailsCachePolicy
非常に優れているためです。また、AFNetworkingは永続的なキャッシュをサポートしていないと思います。これは私にとっては立ち入り禁止です。