NSURLSessionクラスおよび関連するクラスは、コンテンツをダウンロードするためのAPIを提供します。このAPIは、認証をサポートするための豊富なデリゲートメソッドセットを提供し、アプリが実行されていないとき、またはiOSでアプリが中断されているときにバックグラウンドダウンロードを実行できるようにします。
高いレベルでは、 NSURLSessionはセッションとタスクの概念に基づいています。タスクは、単一のURLに対する単一の要求(または単一のURLへの単一のアップロード)を表します。セッションは、関連する要求のグループです。
オペレーティングシステムは、既存の単一のセッション(NSURLConnectionのように基本的に動作する共有セッション)を提供します。さらに、必要に応じて独自のセッションをアプリケーションに作成することもできます。
異なるアプリはセッションをさまざまな方法で使います。多くのアプリは起動時に1つのセッションを作成し、そのまま再利用します。他のアプリは、関連するタスクのグループをキャンセルすることができます(たとえば、タブを閉じるときに未処理のリクエストをキャンセルするWebブラウザなど)。したがって、関連するリクエストの各グループを保持する1つのセッションを作成します。
NSURLSessionを使用する場合の最初の手順は、セッション構成オブジェクトを作成することです。再利用可能な(通常)再利用可能なオブジェクトには、最大同時実行性、各要求で送信する余分なヘッダー、セルラ無線(iOSのみ)で送信される要求を許可するかどうか、タイムアウトなどのような、資格情報の保存、最小TLSバージョン、さらにはプロキシ設定などがあります。
セッションの設定には、セッションの動作方法に応じて3種類あります。
バックグラウンド設定を作成するときは、あとでバックグラウンドセッションを再設定できるようにするセッション識別子を指定する必要があります(アプリが終了するか、OSによって中断または中止された場合)。アプリケーションで同じ識別子を使用してセッションのインスタンスを複数持つことはできません。そのため、ルールは再利用できません。他のすべてのセッション構成を再利用して、必要な数のセッションを作成できます。したがって、同様の設定で複数のセッションを作成する必要がある場合は、設定を一度作成して、新しいセッションを作成するたびに再利用することができます。
セッションを作成したら、そのセッションでタスクを作成できます。タスクには3つのタイプがあります。
これらの各タイプを使用すると、ブロックベースのコールバックを使用するか、セッションでデリゲートを提供し、デリゲートメソッドを実装するなど、さまざまな方法で応答データを取得できます。
さらに、NSURLSessionを使用すると、認証処理、カスタムTLS証明書処理(クライアント証明書とサーバー検証の両方)の実行、キャッシングの動作の変更などのためのデリゲートメソッドを提供できます。