c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

アプリのブートストラップ

uzulla2008-09-18

普通に作る分には何も考えずにhogehogeView.xibファイルと、hogehogeAppDelegate.*をいじれば良いのだが、具体的にはどうやって読み込まれていくのかメモ、というか自分で調べてみた結果メモ(つまり嘘書いてあるかもね)。
こうやって書いてみると、結構ステップ数少ないね。

1,main.m で起動

どうやら最初に呼び出されるのはこのmain.mらしい。mainが最初ってのはいにしえから変わってないね。
この内部ではほとんどなにもしてなくて、メモリ管理用の記述と、UIApplicationMainの呼び出ししかしてない。
UIApplicationMainが終わると適当な返値を返して終了するらしい。


つまりUIApplicationMainこそがCocoa Touchプログラムのキモ、Mainなんだなー。

2,UIApplicationMainが呼び出される

この中で具体的にどういう事をやっているのかよくわからないので推測だけれど、

  1. info.plistをよみこみ、読み込むべきxibファイルを判断したりする?
  2. xibファイルをロードし、処理すべきクラスインスタンスなども生成し、ヒモづける?

という事をやっている模様。

3,xibファイルがロードされ、hogehogeAppDelegateが読み込まれる

xibファイルはXMLなので、エディタで開くと中にClass名(ここではhogehogeAppDelegate)が記述してある。
そのClassのインスタンスをヒモづけて初期化し、一通りおわったらそのクラス内部のapplicationDidFinishLaunchingメソッド が呼び出される模様。つまりこれがJSで言うところのonLoad、ASで言うところのinitか。

4,applicationDidFinishLaunching

xibファイルまでが無事ロードされたら、このメソッドが呼び出される。
色々なサンプルコードを読む限り、ここで様々な初期化をすべきらしい。


初期化がおわれば後はタッチ操作のイベントハンドラとか、そういった物で駆動されていく…事が普通だろう。


ただ、ここから先で様々な物が暗黙に処理されててよくわからない事が多い

サンプルコードを色々見ると、applicationDidFinishLaunchingがせいぜいデータの初期化しかやっていない物が結構ある。
(サンプルコードのUITableViewSuiteとか)

多分xibファイルに宣言されたりしている様々な物は生成が終われば自立的にデータをとってきたりとかしてやっているんだろう。
(UITableViewなんかはDatasourceさえ作っておけば、自分で動くみたいなので)
ここら辺もできればちょっとは追いかけてみたいが…、ライブラリなのでソースが非公開みたい、残念。

xibファイルをほとんど一切使わず、全部コードで記述してあるようなサンプルコードがあれば読んでみたいなあ。



まーでもだんだん地面が見えてきたな−、とはいえまだまだ全然なんだけど。