Objective-C入門その13:main.m一気読み

サルでき.jp > 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) > Objective-C入門その13:main.m一気読み

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

よいよ最後!Hello,world! はもうばっちり!?

長かったですねー。
ここまでの道のり。

この調子でiPhoneアプリなんて作れるのかよって、思いましたか?

Me, too.

なにはともあれここまでやってきました。
アプリケーションデリゲートクラスと、ビューコントローラークラスは実装済みです。
Objective-C入門その9:HelloWorldAppDelegate解決編(前編)
Objective-C入門その10:HelloWorldAppDelegate解決編(後編)
Objective-C入門その11:MyViewController.h一気読み
Objective-C入門その12:MyViewController.m一気読み

残すはアプリケーションが起動して最初に呼ばれる関数。
main関数のお話です。
ざっと読んでみましょう。

main.m
起動時に最初に呼ばれるmain関数。

#import <UIKit/UIKit.h>
UIKitフレームワークの読み込みですね。
ココでもやってます。

int main(int argc, char *argv[]) {
あれ?何この書き方。と思ったアナタ。

正解。

ここに来てまさかの裏切り。
コレ、C言語で関数を定義する書き方です。

ずぅ…っと前にお話ししましたが、
Objective-C入門その3:「@」って何だ?

Objective-C言語は、
「オブジェクティブ指向以外の部分は、C言語を使う」という、
インサイト的ハイブリッド言語になっています。

ここは、C言語の守備範囲なんです。
文句の1つも言いたくなりますが、おとなしくC言語で読みましょう。
Objective-Cよりはシンプルですので。

戻り値の型 関数名(引数1の型 引数1の名前, 引数2の型 引数2の名前){
です。

整数型の戻り値を持つmainという関数を設定
-引数1は整数型の argc
-引数2は文字型のポインタ配列※ *argv[]
※ポインタ配列の説明は長くなりそうですので省略しますが、
とりあえずここでは「1個じゃなく、複数の単語(文字列)」を指してるのね、
と覚えておいてください。

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
で、C言語の中に現れるObjective-C。と。

まさにカオス

・NSAutoreleasePoolの生成
・初期化
・poolという変数への格納

を行っています。

NSAutoreleasePoolっていうのは「自動インスタンス破棄マシーン」のことで、
[pool release]とセットで使います。

細かいことはまだよくわかりませんので、
このへんは「ふんふ~ん」と読み流しておきましょう。

int retVal = UIApplicationMain(argc, argv, nil, nil);
で、こいつがmain関数の本体。
UIApplicationMainの実行です。

コイツを実行すると、
同じくxcodeに含まれる「info.plist」というプロパティリストの中の、
「Main nib file base name」に設定されているxibファイルが呼び出されます。

Hello, Wolrd!では「MainWindow.xib」が登録されています。
で、このMainWindow.xibが呼び出されると、
そこに設定されている「HelloWorldAppDelegate」の「applicationDidFinishLaunching」が呼ばれ、
アプリケーションが初期化されるわけです。

…。

とりあえず。

main関数を呼ぶと、
Windowが初期化されて、
AppDelegateが呼ばれる。

くらいにしておきましょう。
たぶんそのくらいで充分です。

今まで見てきた各種クラスも、誰かが実行してくれないと動きませんので、
「ああ、mainが動くとAppDelegateが動いて、AppDelegateがViewControllerを動かしているのね」
っていうつながりはとっても大事です。そこがわかればとりあえずOK。

[pool release];
先ほど出てきましたね。
自動インスタンス破棄マシーン」です。

リリースすると、インスタンスを全て破棄します。

return retVal;
戻り値として、アプリケーションの初期化結果を戻します。

UIApplicationMainの処理がしくじると、
ここで「エラー」が戻ってくるわけです。

}
で、終了、と。

なんだか。

わかったようなわからないような。

それもそのはず。

ほとんどがお作法のお話だったんです。

もうお気付きかと思いますが、
ぶっちゃけこのHello, Wolrd!、
オリジナルでちゃんと書いているのは、

MyViewControllerに出てくるupdateStringだけなんです。
Objective-C入門その11:MyViewController.h一気読み
Objective-C入門その12:MyViewController.m一気読み

あとはほとんどコピペで良し

コピペ部分を除けば、確かにコイツは最初のプログラム「Hello, World!」です。

なんってめんどくせぇ言語なんだ。Objective-C。
ってことを理解するためのサンプルプログラムでした。

でも、ここでくじけちゃもったいない!
お作法なんて、そのうち身体が勝手に覚えます。

楽しいのは、自分で作るオリジナルの部分です。

まず最初のハードルは越えました。
次回から、オリジナルプログラムをバンバン作っていきましょう!

関連する記事:


Advertisement