libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSURLとNSURLConnection (3/6)

作成:2011-02-23 09:39
更新:2011-02-23 09:42

■NSURLConnectionによる通信の流れ

ネットワークの利用ということを考えれば、もっとも重要なのは「ネットワーク通信」でしょう。これにはいくつかのクラスが必要となります。通信に使われるクラスを整理すると、以下のようになるでしょう。

NSURL
まずは、URLをNSURLとして用意する必要がありますね。これは既にわかるでしょう。

NSURLRequest
これは、リクエストに関する操作や情報の管理を行うためのものです。リクエストというのは、こちらからホストへの要求のことです。

NSURLResponse
これは、サーバーからのレスポンスを管理するためのものです。ネットワーク通信では、サーバーにリクエストを送信すると、今度はサーバーからレスポンスが返ってきます。

NSURLConnection
URLによるサーバーとの接続を管理するものです。ここでNSURLRequestNSURLResponseを使ってサーバーに接続を行います。

◯通信処理の流れ
1.まず、NSURLを使ってアクセス先のアドレスを用意します。

2.NSURLをもとに、NSURLRequestインスタンスを作成します。

3.レスポンスを保管するNSURLResponseの変数を用意します。

4.NSURLRequestNSURLResponseを使い、NSURLConnectionインスタンスを作成し、通信を開始します。

5.サーバーから結果が返ってきたら、NSURLResponseから必要な情報を取り出します。

ざっとこんな流れになります。プログラミング時に用意しなければならないのは、NSURLの他には、NSURLRequestNSURLConnectionのインスタンスです。NSURLResponseのインスタンスは作成しません。これは通信の結果、NSURLConnectionによって作成され変数に設定されるため、自分でインスタンスを用意することはありません。では、NSURLRequestNSURLConnectionのインスタンス作成を以下に整理しておきましょう。

◯NSURLRequestインスタンス
NSURLRequest* 変数 = [NSURLRequest requestWithURL:《NSURL*》];

◯NSURLConnectionインスタンス(同期)
SNData* 変数 = [NSURLConnection
        sendSynchronousRequest:《NSURLRequest*》
        returningResponse:《NSURLResponse**》 error:《NSError**》];
NSURLConnectionによる通信には、「非同期」と「同期」があります。同期通信というのは、サーバーにリクエストを送り、サーバーからレスポンスが返ってきて、それをすべて受け取って完了したらおしまい、というように、全部を順番に1つ1つ実行していくものです。すべてが終わるまでプログラムの実行は停止され、通信が終わってから続きが実行されます。

非同期通信というのは、サーバーにリクエストを送ったら、それでおしまいです。後は自由時間、好きにしてよろしい! ……そして、サーバーからのレスポンスがすべて完了し「全部受け取った」となったら、あらかじめ指定してあった処理が呼び出される、という形です。つまり、通信中の待ち時間はなくなり、「終わったら呼んでね」という形で通信が行われます。

同期通信は、終わるまでずっと待つため、通信状態などによってはけっこうプログラムの実行が停止してしまいます。が、処理は単純で扱いやすいものです。非同期通信は待ち時間がなく、非常に柔軟に対応できますが、別途レスポンス完了後の処理の呼び出しなどをあれこれ工夫しないといけないため、けっこうややこしくなります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る