2010/01/12

Source File Organization

6章からは、もともと1つのファイルに記述していたファイルをクラス毎に複数のファイルに分割する手法を紹介している。
この要素はイライラ棒を作る上で非常に重要な要素になる。以前手を付けていたイライラ棒はmain.m1つに全てのコードを記述していたため、とても見づらいものになっていた。そこでiPhone Dev Centerで配布しているようなサンプルコードのようにクラス毎にファイルを分割して見やすいプロジェクトにすることを検討した。
しかし、サンプルコードのようにうまくコードを分割することができずにいたため、 こういった勉強をしたいと感じていたところだった。

そんな前置きはさておき。。。



まずはこのように記述されているTireクラスとEngineクラスを以下のようにそれぞれ分割していく。

Tire.h



Tire.m



Engine.h



Engine.m



このように@interfaceを含む宣言部を.hファイル、@implementを含む実装部を.mファイルとして2つのファイルに分けて記述する。
この2つのファイル間の関連のことをDependenciesという。
ここでのコツは.hファイルにでCocoa.hをインポートし、.mファイルで.hファイルをインポートすることでスーパークラスのNSObjectとCocoa.hを継承させるということだ。同じクラスの宣言と実装を違うファイルで行ったとしてもこのような継承をしっかりすれば問題ない。

また、この組み合わせは常に.hファイルと.mファイルが1対1である必要はない。例えば1つの.hファイルを100個の.mファイルでインポートしても問題はない。その逆もアリだ。
他にも、File1.hでFile2.hをインポートしてさらにFile2.hでFile3.hをインポートするというように、.hファイル内でさらに.hファイルをインポートすることも可能だ。
このとき最上位のFile3.hに変更があると、Xcodeはそれをインポートしている2つのファイルを再コンパイルする。そのためコンパイルには時間はかかってしまうが、そこで形成された繋がりは切れる事はない。

こういった所でInheritanceの概念が活用されている。