libro
www.tuyano.com
初心者のためのiphone/ipadプログラミング入門

デフォルトのソースコードをチェックしよう! (2/5)

作成:2011-03-08 10:10
更新:2011-03-08 10:22

■UIApplicationDelegateとプロトコル

続いて、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に用意されているというわけです。

では、この「デリゲート」というのは、一体どういうものなのでしょう?

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

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

●プログラム・リスト●

※MyIAppAppDelegate.h

#import <UIKit/UIKit.h>

@class MyIAppViewController;

@interface MyIAppAppDelegate : NSObject 
        <UIApplicationDelegate> {
    UIWindow *window;
    MyIAppViewController *viewController;
}

@property (nonatomic, retain) IBOutlet 
        UIWindow *window;
@property (nonatomic, retain) IBOutlet 
        MyIAppViewController *viewController;

@end
※関連コンテンツ

「初心者のためのiphone/ipadプログラミング入門」に戻る