IOSネットワーク開発NSURLSession詳細(一)概要


オリジナルblog、転載は出典blogを明記してください.csdn.net/hello_hwc私のIOS-SDK詳細コラム、注目を歓迎しますhttp://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:
このIOSネットワークプログラミングのシリーズ計画は6つの文章、NSURLSession 3編(1編の概要、1編の詳細は3種類のtaskとdelegateの使用、1編は授権、証明書などの内容を述べる)、ネットワークの基礎知識の2編(1編のREST APIの説明はすでに書き終わって、1編は私がブログを書く過程で出会った概念をまとめます)、AFNetWorkingライブラリの使用は1編書きます.これは初歩的な計画で、書く過程の中で、内容が不完全であることを発見したら、適当にいくつか追加します.
この文章は少し退屈かもしれませんが、後続の内容を理解することが大切だと思いますので、先に書きました.
概要
NSURLSessionは、IOS SDKが提供する比較的使いやすいネットワークAPIのセットである.NSURLRequest,NSURLCache,NSURLSession,NSURLSessionConfiguration,NSURLSessionTaskのいくつかの部分が含まれています.IOSのネットワークプログラミングはNSURLSessionの他にNSURLConnectionも使用できるが,後者の使いやすさは劣る.ネットワーク開発の全体は5つの部分を含む
サポートされるプロトコル(httpなど)ライセンスおよび証明書(サーバがユーザー名パスワードを要求するなど)クッキーストレージ(クッキーを保存しないなど)cache管理(例えばメモリcacheのみ、ハードディスクにcacheしない)構成管理(http headersなどの構成情報)
IOS网络开发NSURLSession详解(一)概述_第1张图片のように
二NSURLSessionのいくつかのコアクラスを簡単に紹介します
これらの類があることを知っていて、たぶん何をしているのか知っていればいいです.
1.1NSURLSessionConfiguration
NSURLSessionの構成情報を指定します.これらの構成情報はNSURLSessionの種類,HTTPの追加headers,要求されたtimeout時間,Cookieの受入ポリシーなどの構成情報を決定する.詳細については、公式ドキュメントを参照してください.
ここではNSURLSessionConfigurationの3種類を詳しく説明し,NSURLSessionの種類を決定する.+ (NSURLSessionConfiguration *)defaultSessionConfiguration
defaultSessionは、ハードディスクベースの永続的なCacheを使用して、ユーザーの証明書をキー列に保存し、共有クッキーを使用して保存します.+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration
の構成情報はdefaultとほぼ同じです.ただし、cache、証明書、またはSessionに関連するデータはハードディスクに格納されず、メモリに格納され、ライフサイクルはSessionと一致します.例えばブラウザの痕跡のないブラウズなどの機能はこれに基づいて行うことができます.+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier
は、バックグラウンドでもAPPがオフになってもデータを転送できるセッションを作成します.バックグラウンドセッションは必ず作成時に一意のidentifierを付与しなければならないので、APPが次回実行されるときにidentifierに基づいて関連する区分を行うことができます.ユーザーがAPPをオフにすると、IOSシステムはすべてのbackground Sessionをオフにします.また、ユーザーに強制的に閉鎖された後、IOSシステムは自発的にAPPを起動することはなく、ユーザーが次回APPを起動してこそ、データ転送が継続される.
1.2 NSURLSessionTask
実際のSessionタスクは、図のような関係を継承する3つに分けられます.DataTask-は、リソースを要求し、サーバがデータを返し、メモリにNSDataフォーマットとして格納します.default,ephemeral,shared Sessionはdata taskをサポートしている.backgroundセッションはサポートされていません.Upload Task-はDataTaskと似ていますが、リクエスト時にrequest bodyが提供されています.さらにbackground Sessionはupload taskをサポートします.Download Task-ハードディスク(HDD)にコンテンツをダウンロードし、すべてのタイプのSessionがサポートします.
作成したtaskはすべて保留状態であり、実行するにはresumeが必要であることに注意してください.
1.3 NSURLSession
セッションはNSURLSessionネットワークに基づいて開発されたコアコンポーネントである.上記のコンフィギュレーションによって構成され、ファクトリとしてNSURLSessionTaskを作成して実際のデータ転送タスクを行います.初期化の例です
self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

taskの作成
 NSURLSessionDataTask * dataTask = [self.session dataTaskWithURL:[NSURL URLWithString:imageURL] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { }];

taskを開始
    [dataTask resume];

1.4 NSURLRequest
要求されたURLとcacheポリシーを指定します.例えば、次のような初期化関数
(instancetype)requestWithURL:(NSURL *)theURLcachePolicy:(NSURLRequestCachePolicy)cachePolicytimeoutInterval:(NSTimeInterval)timeoutInterval

初期化時にurl,cachePolicyおよびtimeoutIntervalを指定する.
NSURLRequestでHTTPMethodを設定できますが、デフォルトはGETです
1.5 NSURLCache
Cache URL要求が返すresponse.
実装はNSURLRequestオブジェクトをNSCachedURLResponseオブジェクトにマッピングすることである.メモリにキャッシュされるサイズと、ディスクにキャッシュされるサイズとパスを設定できます.特に必要でない場合はShared Cachedで十分ですが、特別な必要がある場合はNSURLCacheオブジェクトを作成し、+setSharedURLCacheで設定します.
もちろん,このクラスにより現在のcacheの使用状況も得られる.
1.6 NSURLResponse/NSHTTPURLResponse
REST APIでリソース操作を行う場合,request(リクエスト)があれば必ずresponse(レスポンス)がある.NSURLResponseには、返されるデータ長(expectedContentLength)、MIMEタイプ、text符号化方式などのmetadataが含まれている.
NSHTTPURLResponseはNSURLResponseのサブクラスであり、ほとんどのRESTはHTTPであるため、通常出会うのはNSHTTPURLResponseオブジェクトである.このオブジェクトからは,HTTPのheaders,status Codeなどの情報が得られる.その中で、HTTP headersには多くの情報が含まれており、分からない場合はwiki上のhttp headersの内容を見ることができます.status codeは、要求の状況を返します.たとえば404はnot foundです.
WWW-Authenticate:Basic realm="nmrs_m 7 VKmomQ 2 YM 3:"は、サーバがClientによるHTTP BA認証を必要とすることである.
1.7 NSURLCredential-証明書情報の処理
例えば、サーバのライセンスなど、ユーザー名のパスワード.
これは認証方式によって処理され、
たとえば、ユーザー名パスワードの認証を初期化します.
(NSURLCredential *)credentialWithUser:(NSString *)userpassword:(NSString *)passwordpersistence:(NSURLCredentialPersistence)persistence

証明書ベース
credentialWithIdentity:certificates:persistence:.

ここの
typedef NS_ENUM(NSUInteger, NSURLCredentialPersistence) {
   NSURLCredentialPersistenceNone, //   
   NSURLCredentialPersistenceForSession,//  Session      
   NSURLCredentialPersistencePermanent,//      
   NSURLCredentialPersistenceSynchronizable//      ,     AppleID       。
};

1.8 NSURLAuthenticationChallenge
リソースにアクセスすると、サーバは認証を必要とする(NSURLCredentialオブジェクトを提供する)ことを返す可能性があります.では、URLSession:task:didReceiveChallenge:completionHandler:が呼び出されます.必要なライセンス情報は、このクラスのオブジェクトに保存されます.いくつかの一般的な属性errorが最後に認証に失敗したエラー情報failureResponse最後に認証に失敗したエラー情報previousFailureCount認証に失敗した回数proposedCredentialが推奨する証明書protectionSpace NSURLProtectionSpaceオブジェクトには、アドレスポートなどの情報が含まれています.次に、このオブジェクトについて説明します.
1.9 NSURLProtectionSpace
このクラスのオブジェクトは、サーバ上のライセンス情報が必要な領域を表し、英語でrealmと呼ばれます.このオブジェクトの情報でChallengeに応答します.たとえば、サーバがユーザー名パスワードに基づく認証を必要とする場合は、NSURLProtectionspaceオブジェクトのhost,port,realm,protocolなどの情報を参照してから、この情報に基づいて証明書を提供する必要があります.
三エージェントdelegate
NSURLSessionのエージェントは通常2つの階層であり、Session階層とTask階層(1つのSessionは複数のTaskを含むことができる).NSURLSessionDelegate-Session階層イベントの処理NSURLSessionTaskDelegate-すべてのタイプのTask階層共通イベントの処理NSURLSessionDownloadDelegate-DownloadタイプのTask階層イベントの処理NSURLSessionDataDelegate-DownloadタイプのTask階層イベントの処理
具体的なエージェントイベントについては、後のデモで説明します.
IOSネットワークの開発を深く学びたい場合は、公式のドキュメントを読むことができます.https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html