##背景
通信に関する処理の実装をやったことがない自分。
iOS開発においてはAFNetworking
がデファクトスタンダードだと知る。
いざフレームワークを導入してみるものの、用途に適した使い方、勘所がつかめない。
順を追って知識を整理する必要性を感じ、下記の流れで整理した。
- URLローディングシステムの整理
- NSURLSessionを中心としたクラス図を描いてみた
- クラス図を俯瞰しながらのまとめ
##URLローディングシステムの整理
AFNetworking2.0系では、NSURLSessionの利用を勧めていた。ならばということで
クラスリファレンスを見ていると、まずはURLローディングシステムを学ぶべしというような記述があった。
Important: The NSURLSession API involves many different classes working together in a fairly complex way that may not be obvious if you read the reference documentation by itself. Before using this API, you should read URL Loading System Programming Guide to gain a conceptual understanding of how these classes interact with one another.
プログラミングガイドはこちら。下記に要点をメモする。
-
NSURLSession
はiOS7以降で開発を進めるなら利用が推奨されるAPI -
旧バージョンを対象とするなら、
- コンテンツをディスク上のファイルにダウンロードしたい場合は
NSURLDownload
を使う - コンテンツをメモリ上にダウンロードしたい場合は
NSURLConnection
を使う
- コンテンツをディスク上のファイルにダウンロードしたい場合は
-
シンプルなリクエストなら、
NSURLSession
を使ってNSURL
から直接取得する -
データアップロードなどのより複雑なリクエストなら、
NSURLRequest
やNSMutableURLRequest
をNSURLSession
やNSConnection
に渡す -
URLローディングシステムはメタデータを提供するために、2つのヘルパークラスを使う。
クラス | クラスの位置づけ |
---|---|
NSRequest | URLやプロトコル固有のプロパティを隠蔽する |
NSResponse | コンテンツのメタデータ(MIME TYPEなど)とコンテンツ自身を隠蔽する |
- プログラミングガイドには、その他に「リダイレクト」、「認証と証明書」、「キャッシュ管理」、「クッキー」、「サポートするプロトコル」に関する記述がある。
##NSURLSessionを中心としたクラス図
まずはNSURLSession のまとめを参照させていただき、NSURLSessionの特徴を知りました。
さらにクラスリファレンスを参照し、その内容から簡単なクラス図を作成した。
クラス図作成のルールは、できるだけこちらに基づいたが自信はない。
##クラス図を俯瞰しながらのまとめ
AFNetworking
では、まずはAFHTTPSessionManager
を使うことになりそうなのでそれをふまえる。
-
NSURLSession
にはきめ細かいデリゲートメソッドがあり、その実装をAFURLSessionManager
が実装している - 僕はそのサブクラスである
AFHTTPSessionManager
に対してプロパティであるNSURLSession
オブジェクトを介してNSURL
やNSURLReqest
、NSResponse
を提供し、NSURLSessionTask
の具体クラスを取得して、
目的のコンテンツを取得する - 取得したコンテンツに対して行いたい処理を、Blocksとして実装して
AFHTTPSessionManager
に設定する - TODO:ここまでで一旦メモを終えるが、必要に応じて第2弾を作る