NSURLSession & NSURLConnection

2651 ワード

NSURLSessionはNSURLConnectionの代替者であり、2013年にios 7とともに発表され、NSURLConnectionの再構築最適化後の新しいネットワークアクセスインタフェースである.iOS 9から.0から、システムはNSURLConnectionの使用を推奨しなくなり、NSURLSessionを使用してネットワーク要求を送信することを推奨します.
NSURLConnectionはNSURLSession,NSURLSessionConfigurationおよびNSURLSessionTaskの3つのサブクラスに置き換えられた:NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask
NSURLConnectionでファイルをダウンロードする場合は、まずファイル全体をメモリにダウンロードしてから砂箱に書き込み、ファイルが大きいとメモリが急騰する場合があります.NSURLSessionUploadTaskを使用してファイルをダウンロードすると、砂箱のtemフォルダにデフォルトでダウンロードされ、メモリが急騰することはありませんが、ダウンロードが完了するとtemの一時ファイルが削除され、タスクメソッドを初期化する際にcompletionHandlerコールにファイルを保存するコードを追加する必要があります.
NSURLConnectionインスタンス化オブジェクト、インスタンス化開始、デフォルトのリクエストは送信(同期送信)され、startメソッドを呼び出す必要はありません.cancelはリクエストの送信を停止することができます.停止後はアクセスを継続できません.新しいリクエストを作成する必要があります.NSURLSessionには3つの制御方法があります.キャンセル(cancel)、一時停止(suspend)、継続(resume)、一時停止後は現在のリクエストタスクの再開を継続できます.
ブレークポイント再送方式:NSURLConnectionでブレークポイントダウンロードを行い、アクセス要求のHTTPHeaderFieldのRange属性を設定することで運転サイクルを開き、NSURLConnectionのエージェントメソッドを運転サイクルのイベントソースとし、ダウンロードデータを受信するとエージェントメソッドが継続的に転用され、NSOutputStreamパイプラインストリームを使用してデータ保存される.NSURLSessionはブレークポイントダウンロードを行い、ダウンロードタスクを一時停止した後、downloadTaskの場合(ダウンロードタスク)は非空であり、cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandlerというメソッドを呼び出し、このメソッドはパラメータを受信し、処理コードブロックを完了する.このコードブロックにはNSDataパラメータresumeDataがあり、resumeDataが非空であれば、このオブジェクトをビューコントローラのresumeData属性に保存する.再ダウンロードをクリックすると、[ [self.session downloadTaskWithResumeData:self.resumeData]resume]メソッドを呼び出してダウンロード操作を継続する作る.
NSURLSessionの構築方法:sessionWithConfiguration:delegate:delegateQueueのうちNSURLSessionConfigurationクラスのパラメータは、クッキー、セキュリティとキャッシュポリシー、最大ホスト接続数、リソース管理、ネットワークタイムアウトなどの構成を決定する構成情報を設定することができる.NSURLConnectionはこの構成を行うことができず、NSURLConnectionがグローバルな構成オブジェクトに依存するよりも柔軟性に欠けているため、NSURLSessionは大幅に改善されています.NSURLSessionでは、3つのクラスメソッドを呼び出して構成オブジェクトを返す3つの構成情報を設定できます.
  • (NSURLSessionConfiguration *)defaultSessionConfiguration、構成情報はハードディスクベースの持続化Cacheを使用し、ユーザーの証明書をキー列に保存し、共有cookieを使用して記憶する.
  • (NSURLSessionConfiguration *)ephemeralSessionConfiguration, default .ただし、cache、証明書、またはSessionに関連するデータはハードディスクに格納されず、メモリに格納され、ライフサイクルはSessionと一致します.例えばブラウザの痕跡のない閲覧などの機能はこれに基づいて行うことができます.
  • (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier、構成情報は、バックグラウンドでもAPPがオフになってもデータを転送できるセッションを作成することができます.バックグラウンドセッションは必ず作成時に一意のidentifierを付与しなければならないので、APPが次回実行されるときにidentifierに基づいて関連する区分を行うことができます.ユーザーがAPPをオフにすると、iOSシステムはすべてのbackground Sessionをオフにします.また、ユーザーに強制的に閉鎖された後、iOSシステムは自発的にAPPを起動することはなく、ユーザーが次回APPを起動してからデータ転送が継続されます.