2009年09月16日

Objective-C入門その9:HelloWorldAppDelegate解決編(前編)

テーマ:Objective-C入門
きますよー。

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アプリの作り方-基礎からの iPhone SDK
基礎からの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解決編。次回はクラスの実装です。



今日も“駄文”兼“長文”最後まで読んでいただいてありがとうございます!

☆ペタ大歓迎です、押してくれると転げ回って喜びます☆
ペタしてね

☆読者登録大歓迎です、アナタは神様ですか☆
読者になる

☆こちらもクリックを是非、ニッポンにサルできの流れを!☆
人気ブログランキングへ にほんブログ村 IT技術ブログへ blogram投票ボタン

トラックバック

この記事のトラックバック Ping-URL :

http://trb.ameba.jp/servlet/TBInterface/micro-garden/10343659019/1201037a

Amebaおすすめキーワード

    アメーバに会員登録して、ブログをつくろう! powered by Ameba (アメーバ)|ブログを中心とした登録無料サイト