20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AFHTTPSessionManagerとNSURLSessionの関係整理

Last updated at Posted at 2014-08-05

##背景
通信に関する処理の実装をやったことがない自分。
iOS開発においてはAFNetworkingがデファクトスタンダードだと知る。
いざフレームワークを導入してみるものの、用途に適した使い方、勘所がつかめない。
順を追って知識を整理する必要性を感じ、下記の流れで整理した。

  1. URLローディングシステムの整理
  2. NSURLSessionを中心としたクラス図を描いてみた
  3. クラス図を俯瞰しながらのまとめ

##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.

プログラミングガイドはこちら。下記に要点をメモする。

  • URLローディングシステムでは、メインとなるURLローディングクラス(群)と5つのヘルパークラスに分類される
    URLローディングシステム

  • NSURLSessionはiOS7以降で開発を進めるなら利用が推奨されるAPI

  • 旧バージョンを対象とするなら、

    • コンテンツをディスク上のファイルにダウンロードしたい場合はNSURLDownloadを使う
    • コンテンツをメモリ上にダウンロードしたい場合はNSURLConnectionを使う
  • シンプルなリクエストなら、NSURLSessionを使ってNSURLから直接取得する

  • データアップロードなどのより複雑なリクエストなら、NSURLRequestNSMutableURLRequestNSURLSessionNSConnectionに渡す

  • URLローディングシステムはメタデータを提供するために、2つのヘルパークラスを使う。

クラス クラスの位置づけ
NSRequest URLやプロトコル固有のプロパティを隠蔽する
NSResponse コンテンツのメタデータ(MIME TYPEなど)とコンテンツ自身を隠蔽する
  • プログラミングガイドには、その他に「リダイレクト」、「認証と証明書」、「キャッシュ管理」、「クッキー」、「サポートするプロトコル」に関する記述がある。

##NSURLSessionを中心としたクラス図
まずはNSURLSession のまとめを参照させていただき、NSURLSessionの特徴を知りました。
さらにクラスリファレンスを参照し、その内容から簡単なクラス図を作成した。
NSURLSessionを中心としたクラス図
クラス図作成のルールは、できるだけこちらに基づいたが自信はない。

##クラス図を俯瞰しながらのまとめ
AFNetworkingでは、まずはAFHTTPSessionManagerを使うことになりそうなのでそれをふまえる。

  • NSURLSessionにはきめ細かいデリゲートメソッドがあり、その実装をAFURLSessionManagerが実装している
  • 僕はそのサブクラスであるAFHTTPSessionManagerに対してプロパティであるNSURLSessionオブジェクトを介してNSURLNSURLReqestNSResponseを提供し、NSURLSessionTaskの具体クラスを取得して、
    目的のコンテンツを取得する
  • 取得したコンテンツに対して行いたい処理を、Blocksとして実装してAFHTTPSessionManagerに設定する
  • TODO:ここまでで一旦メモを終えるが、必要に応じて第2弾を作る
20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?