delegate とは何か(2)

delegate は必要性があっての概念なのですが、その必要性が分かっていないとなかなか理解が進みません。

必要性を理解するために、具体的な事例をもとにして整理してみたいと思います。

次のようなアプリを考えます:

・ユーザは画面上の丸を頻繁に動かします

・ユーザが動かした丸に応じて、画面上で描写が変化します

・ユーザは必要に応じて丸を追加したり削除したりできます

f:id:satoshi777jp:20160623212810j:plain

画面上の、オレンジと黄色の丸はユーザーが動かすことができます。

 

さて、オレンジと黄色の丸はどのように生成するでしょう。

通常、オレンジの丸、黄色の丸それぞれクラスを作り、ViewController.m 辺りに、初期表示用のコードを記載し画面上に表示します。

表示されているオレンジも黄色もそれぞれユーザは任意に動かすことができます。

ユーザが丸を動かすと、ViewController の touchesBegan:withEvent メソッドや touchesMoved:withEvent メソッドが呼ばれます。

どの丸を動かしても ViewController の同じメソッドが呼ばれることが、以降を理解する上で重要です。

つまり、オレンジの 0 を動かしたときとオレンジの 1 を動かしたときに同じメソッドが呼ばれることになります。

 

同じメソッドが呼ばれることから、プログラムを作成する上ではユーザがどのオブジェクトを操作した結果、そのメソッドが呼ばれたかを判別する必要が出てきます。

touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event とメソッドは定義されているため、touches には引数として、操作したオブジェクトが含まれているので名前や tag を取り出すことで判別できることになります。

つまり、delegate を使わなくても、ViewController.m だけでプログラミング可能ということになりますが、それでもなお、delegate を使ったほうがよいのです。

それはなぜでしょう。

 

続く。