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

サルでき.jp > 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) > Objective-C入門その9:HelloWorldAppDelegate解決編(前編)

2009/09/16 09:00 投稿先 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) 投稿者 カワサキ タカシ

きますよー。

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。

いろいろ説明が錯綜しておりましたが、
こちらの本によると。
Objective-C入門その9:HelloWorldAppDelegate解決編(前編)
基礎からの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解決編。次回はクラスの実装です。

関連する記事:


Advertisement