[ iPhone ] HelloWorldAppDelegate.h

HelloWorldAppDelegate.h のソースコードを読んでみる

[ HelloWorldAppDelegate.h ] は、アプリ [ Hello, World! ] を起動・終了した時に動作するクラスの宣言をするヘッダーファイルです。

オリジナルのソースコードは次のような感じ。

#import <UIKit/UIKit.h>
@class MyViewController;
@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
    MyViewController *myViewController;
}
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) MyViewController *myViewController;
@end

ここから、一行ずつ理解していきます。

1 行目 : フレームワークの読み込み

#import <UIKit/UIKit.h>

iPhone SDK のキモ [ UIKit/UIKit.h ] というユーザーインターフェース用のフレームワークを読み込んでいる。 行頭に [ ## ] が付くのはプリプロセッサ命令と呼び、プロセスが始まる前に命令が動く。

2 行目 : 他の場所で定義されたクラスの名前を宣言

@class MyViewController;
[ MyViewController ] は独自に作ったクラスなので [ NSObject ] に含まれていない。 だから、特別にクラスを宣言しておく。

3 行目 : クラスの宣言

@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> {

@interface から @end の間に書かれているのはクラスの宣言です。

@interface の文法は次のような感じ。

@interface の文法

iPhone OS の Objective-C を使ったフレームワークは、ほぼ全てこの NSObject と言うスーパークラスを親にしてるため、NSObject をスーパークラスとして宣言しておけば、NSObject 以下の全てのクラスが使える。

プロトコルに書かれている UIApplicationDelegate は、アプリの起動・終了時に行われる固有の処理を担当するクラスなんだそうです。

4-5 行目 : インスタンス変数の宣言

IBOutlet UIWindow *window;

上の一文は、UIWindow 型の window というインスタンス変数を宣言して [ アウトレット ] として使うという意味。

MyViewController *myViewController;

上の一文は、MyViewController 型の myViewController というインスタンス変数を宣言している。

文法は次のような感じ。

インスタンス変数の宣言

IBOutlet
アウトレット
UIWindow
クラスオブジェクト型 ( iPhone の Window の事 )
*window
インスタンス変数の名前 ( 型がクラスオブジェクト型の場合は、変数名の頭にアスタリスクを付ける )

7-8 行目 : アクセサメソッドの自動生成用プロパティの宣言

@property (nonatomic, retain) UIWindow *window;

上の一文は、window というインスタンス変数へのアクセス方法を定義している。

@property (nonatomic, retain) MyViewController *myViewController;

上の一文は、myViewController というインスタンス変数へのアクセス方法を定義している。

アクセサメソッドとは、インスタンス変数へのアクセスを制御するメソッドで、これを書いておかないとインスタンス変数の値が読み書きできない。

宣言部分に [ @property ] を、実装部分に [ @synthesize ] をセットで書いておくと、自動的にアクセサメソッドを生成してくれます。

9 行目 : クラス宣言の終了

@end

ここまでがクラス宣言。

長かった…。

コメントを残す

メールアドレスが公開されることはありません。