[iOS]ヘッダファイルとソースファイルの骨組
ActionScript の場合、クラスファイルは拡張子が as のファイル単体です。
C言語の場合、ヘッダファイルとソースファイルのペアになるのは、今さら言うまでもないですね。Objective-C もけったいなシンタックスとは言えどC言語。やっぱりヘッダとソースのペアになるとのこと。
ヘッダファイルは AS における interface ファイルに似てますな、ってゆーかオライリーの「iPhone SDK アプリケーション開発ガイド」ではインタフェースって呼んでる(P19、20)。
Objective-C ではソースファイルの拡張子が c ではなく m になるそうで、ずいぶんと違和感がある。ヘッダファイルの拡張子は Objective-C でも h で、こっちは座りがいい。
具体的にヘッダファイルとソースファイルの構造を見ていきます。
以下のコードは、XCode でプロジェクトに新たなクラスファイルを追加したときに、自動的に生成されるヘッダとソースのコードです。それぞれのファイルの骨組ですね。
クラス名はまどろっこしくも ClassExtendsNSOjbect としました。
ヘッダファイル
#import <Foundation/Foundation.h> @interface ClassExtendsNSOjbect : NSObject { } @end
ヘッダファイルの構造は @interface で始まって @end で終わる。
@interface の直後にクラス名、そして ":" で区切って親ファイルの型を指定します。
その後 {} を記述します。
そして @end でクローズ。
@interface の前に import 文がつきますが、自動生成だし、意味は AS でも同じなので今はスルー。
さてこのサンプルにおける親クラスであるところの NSObject。これは Objective-C における全てクラスの祖先。AS でも Object って型が全てクラスの始まりだから、同じようなもんですね。
ところで AS の場合、クラスを継承しないというがある場合、以下のように記述しました。
public class ClassName extends SuperClassName { }
一方、クラス継承を書かない場合もありますよね。
public class ClassName { }
このように継承を明示的に書いていない場合、実は暗黙的に Object 型を親クラスとして継承しているんだとか。あえて明示すると以下のようになりますか。
public class ClassName extends Object { }
Objective-C の場合、そのような暗黙は通用しないようで、明示的に NSObject からの継承を記述しないとイカンとのこと。
ソースファイル
#import "ClassExtendsNSOjbect.h" @implementation ClassExtendsNSOjbect @end
ソースファイルの構造は @implementation で始まって @end で終わる。
@implementation の直後にクラス名を記述。
そして @end でクローズ。
ヘッダファイル同様、ソースファイルも先頭に import 文が記述されます。import されるのは対になるヘッダファイル。
これがヘッダファイルとソースファイル、それぞれの骨組なんですね。
AS で慣れきった頭には、常にヘッダファイルとソースファイルをペアで書かなきゃいけないってのは、めんどいっすねー。
Comments
Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!