時々、クラスを型として使いたいときがあります。
そんなときに、@class (クラスの前方宣言)というコンパイル指示子を使うと
ちょっと嬉しくなります。
普通な感じだと、下記のように該当するクラスをimportして使ってたりしますが
Example.h
#import "ClassA.h"
@interface Example : NSObject
@property ClassA *classA;
- (void)methodA:(ClassA*)classA;
@end
@class を使うと、下記のようにちょっとカッコよくなりました。
Example.h
@class ClassA;
@interface Example : NSObject
@property ClassA *classA;
- (void)methodA:(ClassA*)classA;
@end
もちろん "," で複数のクラスを定義することもできます。
@class ClassA, ClassB, ClassC;
##メリット
- 循環参照を防止
- コンパイル速度が向上する
- イケてるエンジニアに見えるかも (笑)
ご存知の通り、hファイルにはクラス名の定義以外に様々な定義が書かれていることがあります。
とくに、hファイルの中で別のhファイルを読み込むようにすると、hファイルを再帰的に、
読み込まなければならないため、コンパイル時の処理が必要以上に重くなることもあります。
また、循環参照の発生を防ぐ有効的な手段とも言えます。