delegate とは何か(2)
delegate は必要性があっての概念なのですが、その必要性が分かっていないとなかなか理解が進みません。
必要性を理解するために、具体的な事例をもとにして整理してみたいと思います。
次のようなアプリを考えます:
・ユーザは画面上の丸を頻繁に動かします
・ユーザが動かした丸に応じて、画面上で描写が変化します
・ユーザは必要に応じて丸を追加したり削除したりできます
画面上の、オレンジと黄色の丸はユーザーが動かすことができます。
さて、オレンジと黄色の丸はどのように生成するでしょう。
通常、オレンジの丸、黄色の丸それぞれクラスを作り、ViewController.m 辺りに、初期表示用のコードを記載し画面上に表示します。
表示されているオレンジも黄色もそれぞれユーザは任意に動かすことができます。
ユーザが丸を動かすと、ViewController の touchesBegan:withEvent メソッドや touchesMoved:withEvent メソッドが呼ばれます。
どの丸を動かしても ViewController の同じメソッドが呼ばれることが、以降を理解する上で重要です。
つまり、オレンジの 0 を動かしたときとオレンジの 1 を動かしたときに同じメソッドが呼ばれることになります。
同じメソッドが呼ばれることから、プログラムを作成する上ではユーザがどのオブジェクトを操作した結果、そのメソッドが呼ばれたかを判別する必要が出てきます。
touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event とメソッドは定義されているため、touches には引数として、操作したオブジェクトが含まれているので名前や tag を取り出すことで判別できることになります。
つまり、delegate を使わなくても、ViewController.m だけでプログラミング可能ということになりますが、それでもなお、delegate を使ったほうがよいのです。
それはなぜでしょう。
続く。