hogeViewControllerクラスってのが何をしているのかよくわからない、ってことで試しにWindow-Based Applicationを使ってみました。
Xcodeで作成してみると、View-Based Applicationよりも原始的な(?)感じですね。
xibファイルも一つしかないし、ViewControllerクラスもないし。
ここからView-Based Applicationっぽく画面にボタンやラベルを設置して、、、というようなことをやってみる、というのを見つけました。
あらびき林檎。 - iPhoneアプリ HelloWorld その2 ViewControllerの追加これを参考にxibファイルとViewControllerクラスを追加。
コードも記事通りに追加して、動作確認。
ここまではいいんだけど、テンプレのView-Based Applicationと何やら記述が違う。
記事内だと、hogeAppDelegate.mの中の
[window addSubview:viewController.view];
の前に、
hogeViewController *controller = [[hogeViewController alloc] initWithNibName:@"hogeView" bundle:[NSBundle mainBundle]];
というようなオブジェクト生成する部分があるのですが、View-Based Applicationの場合はそういう記述がないのです。
見比べながら、どーなってるねん?といじったり調べたり、、、
おかげでちょっとは理解が深まったかな、、、?
きっと、Interface Builderでごにょごにょすると、Xcode側でコードとしてオブジェクトを生成しなくてもいいみたい。
そういえば、ラベルでもボタンでも別にオブジェクト生成しなくても使ってきたしね。
ところで、調べているうちにView-Based ApplicationのhogeAppDelegate.hに
@class hogeViewController;
なる記述がありました。
ん???
なんだこれ?
と思ってGoogle先生に聞きまくるもなかなかたどり着けず、、、
ようやく、
@classと#importの使い分け « StudioT::DevLogという記述を発見。
@class ClassName;
はClassNameをクラス名として使用することを宣言
#import "ClassName.h"
は複数回読み込み防止機能付き#include
そのクラスの機能を実際に使用する必要のないヘッダーファイルでは@classを使用し、
インターフェイスを使用する必要のある実装ファイルでは#importを使用する。
なるほど、そういうことか。