web-dev-qa-db-ja.com

NSURLConnectionとNSURLSessionの最大の違いは何ですか

NSURLSession はAppleの NSURLConnection よりも新しいネットワークSDKです。 3番目の古い選択肢はCFNetworkです。

ここでの質問は、Appleがこれらのように進化している理由を理解するために、両者の最大の違いを把握することです。

ありがとう

23
Forrest

モデル全体が異なります。 NSURLSessionは、同様の構成(ヘッダーの標準セットなど)を必要とする多くの要求があるという前提に基づいて設計されており、そうすればはるかに簡単になります。

NSURLSessionは、バックグラウンドダウンロードのサポートも提供します。これにより、アプリが実行されていない間(またはiOSのバックグラウンドにあるとき)にリソースをダウンロードし続けることができます。いくつかのユースケースでは、これも大きなメリットです。

NSURLSessionは、関連するリクエストのグループ化も提供するため、ユーザーがウィンドウまたはタブを閉じたときにWebページのロードに関連するすべてのロードをキャンセルするなど、特定のワークユニットに関連するすべてのリクエストを簡単にキャンセルできます。

NSURLSessionは、ブロックを使用してデータを要求するためのより優れたインターフェイスも提供します。これにより、カスタム認証処理、リダイレクト処理などを行うためのデリゲートメソッドとそれらを組み合わせることができます。ブロックベースのコールバックを使用しないようにコードをリファクタリングする必要がありました。

38
dgatwood

NSURLConnection

Foundation URL Loading Systemを形成する相互に関連するコンポーネントのグループ:NSURLRequest、NSURLResponse、NSURLProtocol、NSURLCache、NSHTTPCookieStorage、NSURLCredentialStorage、およびその名前の由来であるNSURLConnection

NSURLRequestオブジェクトはNSURLConnectionオブジェクトに渡されます。デリゲート(以前の非公式およびプロトコルに準拠)はNSURLResponseとして非同期に応答し、関連するNSDataはサーバーから送信されます

要求がサーバーに送信される前に、共有キャッシュが調べられ、ポリシーと可用性に応じて、キャッシュされた応答が即座に透過的に返される場合があります。キャッシュされた応答が利用できない場合、後続の要求に対する応答をキャッシュするオプションを使用して要求が行われます。サーバーへの要求をネゴシエートするプロセスで、そのサーバーは認証チャレンジを発行する場合があります。認証チャレンジは、共有Cookieまたは資格情報ストレージ、または接続デリゲートによって自動的に処理されます。登録済みのNSURLProtocolオブジェクトによって発信要求をインターセプトして、必要に応じて読み込み動作をシームレスに変更することもできます。

NSURLSession

nSURLSessionの名を冠したクラスに加えて、相互依存クラスのグループを指します。 NSURLSessionは、以前と同じNSURLRequest、NSURLCacheなどで構成されていますが、NSURLConnectionをNSURLSession、NSURLSessionConfiguration、およびNSURLSessionTaskの3つのサブクラスNSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTaskに置き換えます。

NSURLSessionTaskは抽象サブクラスで、NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTaskの3つのサブクラスが直接使用されます。これらの3つのクラスは、最新のアプリケーションの3つの重要なネットワークタスクをカプセル化します。JSONやXMLなどのデータを取得し、ファイルをアップロードおよびダウンロードします。 more

13
Avijit Nagare

NSURLSessionとNSURLConnectionの違い

NSURLSession

[〜#〜] note [〜#〜]:(NSURLConnecitonはOS X 10.11およびiOS 9.0では非推奨です)

1) NSURLSessionは、同様の構成(ヘッダーの標準セットなど)を必要とする多くの要求があるという前提に基づいて設計されており、作業がはるかに容易になります。

2) NSURLSessionは、バックグラウンドダウンロードのサポートも提供します。これにより、アプリが実行されていない間、またはiOSでバックグラウンドにあるときに、リソースのダウンロードを継続できます。

3) NSURLSessionは、関連するリクエストのグループ化も提供します。特定のワークユニットに関連付けられたすべてのリクエストをキャンセルします。ユーザーがウィンドウまたはタブを閉じたときにWebページをロードする

4) NSURLSessionは、ブロックを使用してデータを要求するための優れたインターフェイスも提供します。nを使用して、カスタム認証処理、リダイレクト処理などを行うデリゲートメソッドと組み合わせることができます。

NSURLSessionConfigurationタイプ

1)defaultSessionConfiguration

Creates a default configuration object that uses the disk-persisted global cache, credential and cookie storage objects.

2)ephemeralSessionConfiguration

Similar to the default configuration, except that all session-related data is stored in memory. Think of this as a “private” session.

3)backgroundSessionConfiguration

Lets the session perform upload or download tasks in the background. Transfers continue even when the app itself is suspended or terminated

NSURLSessionTasksのタイプ

1)データタスク(NSURLSessionDataTask)

データタスクは、JSONデータなど、サーバーにデータを要求するために使用されます。これらのデータは通常メモリに保存され、NSURLSessionDataTaskを使用できるファイルシステムにアクセスすることはありません。

2)タスクのアップロード(NSURLSessionUploadTask)

アップロードタスクは、リモートの宛先にデータをアップロードするために使用されます。 NSURLSessionUploadTaskを使用できます。

3)タスクのダウンロード(NSURLSessionDownloadTask)

ファイルをダウンロードして、一時的な場所に保存します。 NSURLSessionDownloadTaskを使用できます。

NSURLSessionとNSURLConnectionの主な違い

NSURLConnection:

nSURLConnectionとのオープン接続があり、システムがアプリを中断した場合、アプリがバックグラウンドモードになると、受信または送信したすべてが失われます。

NSURLSession

この問題を解決し、プロセス外ダウンロードを提供してください。アクセス権がない場合でも、接続プロセスを管理します。使用する必要があります

  application:handleEventsForBackgroundURLSession:completionHandler in your AppDelegate

詳細については、 NSURLSessionとNSURLConnectionの違い を参照してください。

8
Jaywant Khedkar