-
Notifications
You must be signed in to change notification settings - Fork 336
8.3 【演習】GCD, Blocksを用いたHTTPリクエストマネージャの作成
Blocsk, GCD を用いた演習として、HTTPリクエストを管理するクラスを作ってみましょう。
- NSURLRequestを受けてリクエストを実行し、完了したらブロックを実行するクラスメソッドを作る
- 通信に失敗した時はエラーブロックが呼ばれる
- 通信は非同期で行い、呼び出し元のスレッドの動作を止めない
- 通信は並列で何本ものリクエストを送ることができる
- 再送はしなくても構いません
NSURLRequest *request = // 任意の初期化
[MixiRequestManager sendAsynchronousRequest:request completionHandler:^(NSURLResponse *response, NSData *data){
// 実行完了時の処理をここに書く
}errorHandler:^(NSURLResponse *response, NSError *error){
// エラーが起きた時はこのブロックが呼ばれる
}];
※ NSURLConnectionのsendAsynchronousRequest:queue:completionHandler:
は使わないでください
6.4 の演習で画像を取得する箇所があったかと思います。そこで用いる画像の通信を置き換えるなどで確認してみてください。
あるいは下記サンプルプロジェクトを使ってください。
6.4の課題で、リクエストを送信するクラスを抜いています。MixiRequestManagerというクラスを作ってください。
このようなクラスを作る上で、ややこしくなるのがリクエストのキューイングが一点あげられます。
またNSURLConnectionの非同期通信にはBlocksを用いる方法以外に、delegateを設定する方法があります。通信スタート時、完了時などにdelegateが呼ばれます。delegateを使う場合、どのリクエストによってdelegateが呼ばれたのかを区別するのが難しいです。(delegate = self
としていくつも投げると、どのリクエストでも同じメソッドが呼ばれるため)
そのため、この演習においては、 非同期で並列 な処理を行うためにGCDのコンカレントなキューを用いて非同期で実行すると実現できます。 この処理を非同期で行うことで、キューに追加する挙動を同期的に行うことで実現することができます。
はじめに
-
導入
-
1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)
-
UIKit 1 - container, rotate-
-
UIKit 2- UIView -
-
UIKit 3 - table view -
-
UIKit 4 - image and text -
-
ネットワーク処理
-
ローカルキャッシュと通知
-
Blocks, GCD
-
設計とデザインパターン
-
開発ツール
-
テスト
-
In-App Purchase
-
付録