いきますよー。
8回もかけて最初の1ファイルの読解に手こずるこのシリーズも、ようやく解決編です。
8回分の修行の成果を見せてやるぜ!
Objective-C入門その1:まずはコメントの書き方から
Objective-C入門その2:山の高さを知ろう!
Objective-C入門その3:「@」って何だ?
Objective-C入門その4:クラス宣言をマスターする
Objective-C入門その5:インスタンス変数宣言をマスターする
Objective-C入門その6:メソッドの宣言と実装をマスターする
Objective-C入門その7:アクセサメソッドをマスターする
Objective-C入門その8:メソッドの中身をマスターする
このHelloWorldAppDelegate。
もといAppDelegate。
いろいろ説明が錯綜しておりましたが、
こちらの本によると。
基礎からのiPhone SDK
アプリケーションが起動した時や終了した時に、アプリケーション固有の動作を行う必要がある場合があります。このような時に処理を依頼するオブジェクトのことをデリゲートと呼びます。デリゲートとは「代理人」というような意味の言葉です。デリゲートの仕組みは、アプリケーション以外のオブジェクトでも遣われるため、アプリケーションに対するデリゲートを、特にアプリケーションデリゲートと呼んで区別します。
が、正解とのことです。
つまり、Hello,World!の起動終了時に動くクラスだよってことですね。
だいたい合ってた。
それでは!
クラスの宣言の方から順番に見ていきましょう。
HelloWorldAppDelegate.h
Hello,World! 起動終了時動作クラス、ヘッダー(クラスの宣言)
#import <UIKit/UIKit.h>
iPhoneSDKの見た目のキモ。UIKitフレームワークを読み込みます。
@class MyViewController;
@classの説明がまだでしたね。
アップルの公式ドキュメントによると、
@class : 他の場所で定義されたクラスの名前を宣言します。
…他?
コレは、@interface~@endのスーパークラス、
つまりNSObject以下の階層の他という意味です。
NSObjectは実は階層構造になってまして。
コイツを一発スーパークラスとして呼んでおけば、NSObject以下にある全てのクラスを使えます。
みなさんのパソコンのフォルダをイメージしてもらうとわかりやすいですかね。
「Dドライブ」と指定しておけば、
その中にある「夏の思い出写真」も「秘密のエロ画像」も参照できるというわけです。
MyViewControllerは、独自で作ったクラスなので、NSObjectの下には入っていません。
なので、ここで@classと書いて、「コレ使いますよ~」と宣言しているわけです。
こう書いた場合、実装ファイルの方で同じクラスをimportする必要があります。
後ほど出てきますので、確認してくださいね。
@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> {
やりましたね~。
クラスの宣言です。
HelloWorldAppDelegateクラスが宣言されていて、
NSObjectがスーパークラスとして、
UIApplicationDelegateクラスがプロトコルとして指定されています。
IBOutlet UIWindow *window;
アウトレットとして、UIWindow型のwindowインスタンス変数が宣言されています。
MyViewController *myViewController;
MyViewController型のmyViewControllerインスタンス変数が宣言されています。
}
@property (nonatomic, retain) UIWindow *window;
アクセサメソッドの自動生成用プロパティの宣言です。
実際の処理の中でwindowインスタンス変数にアクセスするので、
アクセス方法を定義しています。
@property (nonatomic, retain) MyViewController *myViewController;
同じくアクセサメソッドの自動生成用プロパティの宣言です。
実際の処理の中でmyViewControllerインスタンス変数にアクセスするので、
アクセス方法を定義しています。
@end
クラス宣言ここまで。
なんだかちゃんと読んでみるとスッカスカな感じがしませんか?
それもそのはず。
コレは、プログラムの初歩の初歩。
Hello, World! の起動終了時にのみ動作するクラスなんですから。
Hello,World! を起動した時に何か処理してたように見えましたか?
画面が開いただけですよね。
大したことやって無いのに書き方が無茶苦茶複雑。
これがObjective-Cの特徴です。なんとなくわかってきましたね。
マスターすればきっとイイコトがあるに違いない。
そうダマされて信じて頑張りましょう。
HelloWorldAppDelegate解決編。次回はクラスの実装です。