web-dev-qa-db-ja.com

ネットワーキングにNSURLSession / NSURLConnectionよりもAlamofireを使用する利点は何ですか?

誰かがこれらの質問を理解するのを手伝ってくれますか:NSURLSession/NSURLConnectionよりもAlamofireを使用する利点は何ですか?

NSURLSessionとNSURLConnectionの違いは何ですか?

21

NSURLConnectionは、ネットワーキング(HTTPリクエストの作成や応答の受信など)を行うためのAppleの古いAPIですが、NSURLSessionは新しいAPIです。後者はより高いレベルであり、一般的にはるかに簡単であり、ほとんどのアプリケーション開発者が使用する定型コードが少なくて済みます。基本的に、更新したくないレガシーコード以外で前者を使用する理由はありません。

少し歴史:NSURLSessionが登場する前は、サードパーティのライブラリであるAFNetworkingが、NSURLConnectionよりも簡単で便利なAPIを提供していたため、Objective Cでネットワーキングを行うための事実上の標準になりました(ラッパーでした。最近では、代わりにNSURLSessionをラップしています。同じ開発者が後に、「SwiftバインディングをAFNetworkingに追加する代わりに、Swiftの方法」を完全に活用するために、AlamoFireと呼ばれるSwift用の同様のライブラリを作成しました。 。同じ時期にNSURLSessionが登場し、AppleがAFNetworkingに触発され、新しいネットワークAPIを使いやすくすることを望んでいたことは明らかであるように思われました-概して、彼らは成功したと思います。これが意味することは、以前はNSURLConnectionの代わりにAFNetworkingを使用することがほとんどの開発者にとって唯一の健全な選択でしたが、今日ではNSURLSessionよりもAFNetworkingまたはAlamoFireを使用する利点ははるかに小さく、ほとんどの開発者にとって新しいプロジェクトを開始するために、最初にNSURLSessionを使用し、AlamoFireを調べます。別の依存関係を追加することを正当化するのに十分な大きさの制限または不便に遭遇した場合のみです。

14

AlamofireはNSURLSessionの上に構築されており、実行するコード行が少なくなりますREST(POST/GET/PUT/etc)との相互作用)これにより、方法の「90%」が得られますしかし、特別なネットワーク呼び出しを行う必要がある場合は、NSURLSessionを使用する必要があります。

例:JSONを取得する単純なAlamofire呼び出し

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

3
Ben

まず、NSURLSessionとNSURLConnectionの違いに答えましょう

  1. NSURLConnection:NSURLConnectionとのオープン接続があり、アプリを閉じたとすると、受信または送信したものはすべて失われます

  2. NSURLSession:ここでは、このケースはアプリデリゲートメソッドの助けを借りて処理されます

    application:handleEventsForBackgroundURLSession:completionHandler

ここにリンクがあります 2つの違いを説明するのに役立つかもしれません

デフォルトのフレームワーククラスに対するAlamofireの利点についての最初の質問に行きましょう。これまでに行ったことについての私の経験を共有しているだけなので、長く読んでください。

私にとって、使用しているテクノロジーに関係なくそうする強い理由がない限り、経験則は決してフレームワークをバイパスしません。

その理由は、過去にサードパーティのライブラリを使用したことがあり、iOSの最新のアップデートではうまくいかなかったため、有料アプリがあり、サードパーティのライブラリが機能しなくなった場合、クライアントのアプリはその価値を失ってしまいます。アプリストアで否定的なコメントを持つことになります。

サードパーティのライブラリを使用する前に、与えられた質問を必ず確認してください。

  1. アップデートの頻度は?
  2. オープンなバグはいくつオープンしていますか?
  3. それを使用する価値は本当にありますか、それともフレームワーククラスを活用できますか?
  4. このライブラリのライセンスは何ですか?

質問に戻ると、get、post、およびputの呼び出しにオフライン同期機能がいくつかあるプロジェクトでAlamofireを使用しました。

今考えてみると、URLSessionsを使用して独自のクラスを作成し、それに応じて応答を処理できたはずです。ここでは特別なことを何もしていないので、Alamofireを使用する必要はありませんでした。

これは、サードパーティを使用するよりもデフォルトのフレームワークですべて達成できると思いますが、とにかくそれを使用しました。なぜ私はそれを使用したのかわからないかもしれませんが、ここで学んだ教訓は、フレームワーククラスを使用して同じことを実現できたということです。そのライブラリの世話人/作成者からの修正に依存する必要があります。

必要な機能にライブラリを使用した後、同じ機能に未解決の欠陥があり、更新されなかったため、独自のカスタム作成を行い、今日まで問題なく機能しているため、未解決のすべての欠陥セクションを確認してください。予期しない驚きを避けてください。

また、上記の回答で述べたように、デフォルトのフレームワークで制限に遭遇した場合にのみ、サードパーティのコンポーネントのみを使用してください。その前に、このライブラリが最後に更新されたのはいつか、どのライセンスがあり、何個の未解決の欠陥があるかを確認してください。ある。

2
NSDumb

Swift 3.0以上の場合、Alamofireは最適化されており、再利用可能であり、組み込み機能も多いため、Alamofireが最適です。Alamofireは、プロトコル、URLRequestConvertible。内部では、AlamofireはNSURLSessionConfigurationの上に構築されたシングルトンパターンを要求します。

0
Krishna Thakur

利点は、抽象化のレベルが高くなるため、コードの行を少なく書くことができることです。ただし、Codableに対する公式のサポートはまだありません。更新Swiftバージョンには欠点がある可能性がありますが、Swift 5.のABI安定性により、これは改善されると思います。また、セキュリティに注意する必要があります。脆弱性。

Objective CとNSURLConnectionの時代には、AFNetworkingのようなライブラリは非常に理にかなっていますが、Swift、Codable、URLSessionを使用すると、Alamofireを使用するケースが少なくなると思います。

0
Some One