続いて、
MyIAppAppDelegateクラスです。これは.hファイルと.mファイルがありますね。まず、.hのほうを見てみましょう。最初に、
#import文があり、次に、ちょっと変わった文があります。
@class MyIAppViewController;
この
@classというのは、
#importに似たもので、指定の名前をクラス名として使えるようにするためのものです。この
MyIAppAppDelegateクラスでは、その中で
MyIAppViewControllerクラスをインスタンス変数として使うため、最初に
@classで「こういう名前のクラスを使いますよ」ということを指定しているのですね。実際にそのクラスを呼び出して動かすわけではないので、
#importは不要です。こういう場合に、
@classを使います。
続いて、このソースコードのポイントである、
MyIAppAppDelegateの定義に進みます。これは、以下のような形で記述されていますね。
@interface MyIAppAppDelegate : NSObject <UIApplicationDelegate>
この
MyIAppAppDelegateクラスは、
@interfaceで宣言されている文の終わりに、
<UIApplicationDelegate>というのが付けられています。この、継承クラスの後に<>記号で付けられるものは「
プロトコル」と呼ばれるものです。
このプロトコルは、クラスに特定の機能の実装を義務付けるのに用いられます。ここでは
UIApplicationDelegateというものが指定されていますが、これにより、
UIApplicationDelegateプロトコルに用意されているメソッドを必ずすべて記述しなければいけないようになります。
■プロトコルとは?
プロトコルの働きというのは、つまり「あらかじめ、所定のメソッドが存在するという前提でコードを用意できる」という点にあります。つまり、こういうことです。
――ある特定の処理を実行する仕組みがあったとしましょう。それにインスタンスを設定すると、そのインスタンスの中の「Abc」というメソッドを実行する、というようなものだとします。この仕組を利用する場合、設定するインスタンスには必ずAbcメソッドが存在するということを保証できないといけません。もし、設定したインスタンスにメソッドがなければ、たちまちエラーになってしまうのですから。
こういうときに用いられるのが、
プロトコルなのです。あらかじめ、Abcというメソッドを持ったプロトコルを定義しておき、その仕組みを利用する際には、「このプロトコルを実装したクラスだけ使えるよ」というようにしておくのです。こうすれば、そこに設定されるインスタンスには必ずAbcメソッドが存在することが保証されます。
この
UIApplicationDelegateというのは、「
デリゲート」と呼ばれる機能のためのものなのです。この
デリゲートという仕組みを利用するのに、「必ずこういうメソッドが必要だ」というのが、この
UIApplicationDelegateに用意されているというわけです。
では、この「
デリゲート」というのは、一体どういうものなのでしょう?