[iOS]ヘッダファイルとソースファイルの骨組

2011 / 06 / 16 by
Filed under: iOS 
Bookmark this on Delicious
[`livedoor` not found]
[`yahoo` not found]

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!





WP-SpamFree by Pole Position Marketing