LoginSignup
4
5

More than 5 years have passed since last update.

意外と便利なコンパイル指示子 "@class"

Posted at

時々、クラスを型として使いたいときがあります。
そんなときに、@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ファイルを再帰的に、
読み込まなければならないため、コンパイル時の処理が必要以上に重くなることもあります。
また、循環参照の発生を防ぐ有効的な手段とも言えます。

4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5