Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

8.3 【演習】GCD, Blocksを用いたHTTPリクエストマネージャの作成

ginrou edited this page May 14, 2013 · 2 revisions

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 の演習で画像を取得する箇所があったかと思います。そこで用いる画像の通信を置き換えるなどで確認してみてください。

https://github.com/mixi-inc/iOSTraining/wiki/6.4-NSURLConnection%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E6%BC%94%E7%BF%92

あるいは下記サンプルプロジェクトを使ってください。

https://github.com/mixi-inc/iOSTraining/tree/12bf7ac18aa0c62d7711811b11ded73d6b3371d6/SampleProjects/8.3

6.4の課題で、リクエストを送信するクラスを抜いています。MixiRequestManagerというクラスを作ってください。

設計の方針

このようなクラスを作る上で、ややこしくなるのがリクエストのキューイングが一点あげられます。 またNSURLConnectionの非同期通信にはBlocksを用いる方法以外に、delegateを設定する方法があります。通信スタート時、完了時などにdelegateが呼ばれます。delegateを使う場合、どのリクエストによってdelegateが呼ばれたのかを区別するのが難しいです。(delegate = self としていくつも投げると、どのリクエストでも同じメソッドが呼ばれるため)

そのため、この演習においては、 非同期で並列 な処理を行うためにGCDのコンカレントなキューを用いて非同期で実行すると実現できます。 この処理を非同期で行うことで、キューに追加する挙動を同期的に行うことで実現することができます。

はじめに

  1. iOSについて

  2. Xcode最初のステッフ

  3. 導入

  4. Objective C の基礎

  5. メモリ管理

  6. 1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)

  7. 1.3 UIViewController1 UIViewController のカスタマイズ(storyboard)

  8. UIViewController2 - ModalViewController

  9. UIViewController2 - ModalViewController(storyboard)

  10. UIViewController3 - ライフサイクル

  11. HomeWork 1 Objective C の基本文法

  12. HomeWork 2 UIViewControllerとModalViewController

  13. HomeWork 3 UIViewController + Animation

  14. UIKit 1 - container, rotate-

  15. UINavigationController

  16. UITabController

  17. Custom Container View Controller

  18. Supporting Multiple Interface Orientations

  19. HomeWork 1 - タブバーからモーダルビューを表示する

  20. HomeWork 2 - NavigationController

  21. HomeWork 2.3 デバイスことに回転対応

  22. UIKit 2- UIView -

  23. UIView

  24. UIView のカスタマイズ

  25. UIView Animation

  26. HomeWork 1 - UIScrollView

  27. UIKit 3 - table view -

  28. UITableView について

  29. UITableViewとNavigationController

  30. custom UITableViewCell の作成

  31. UITableViewのその他のオプション、カスタマイズ

  32. HomeWork 1 - Dynamic height with a custom uitableviewcell

  33. UIKit 4 - image and text -

  34. UIImagePickerController

  35. Assets Library

  36. UITextFiled, UITextView

  37. KeyboardNotification

  38. Homework 1 - フォトの複数枚選択

  39. ネットワーク処理

  40. NSURLConnection

  41. JSONのシリアライズとデシリアライズ

  42. UIWebView

  43. ローカルキャッシュと通知

  44. NSUserDefaults, Settings Bundle

  45. NSFileManager

  46. Key Value Observing

  47. NSNotification、NSNotificationCenter を用いた通知

  48. UILocalNotification

  49. Blocks, GCD

  50. Blocks

  51. GCD

  52. 【演習】GCD,-Blocksを用いたHTTPリクエストマネージャの作成

  53. 設計とデザインパターン

  54. クラス設計 1

  55. クラス設計 2

  56. [クラス設計演習] (https://github.com/mixi-inc/iOSTraining/wiki/9.3-%E3%82%AF%E3%83%A9%E3%82%B9%E8%A8%AD%E8%A8%88%E6%BC%94%E7%BF%92)

  57. 開発ツール

  58. Instruments, デバッガ

  59. CocoaPods

  60. テスト

  61. iOS開発におけるテスト

  62. GHUnit

  63. Kiwi

  64. KIF

  65. In-App Purchase

  66. In-App Purchase

  67. 付録

  68. Tips of Xcode

  69. Auto Layout 入門

  70. Auto Layout ドリル

Edit sidebar

Clone this wiki locally