北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

@class

クラスのオブジェクト変数の定義が交差しているときに#includeを書くと、当然コンパイルが通らない。

【ClassA.h】
#include "ClassB.h"
@interface ClassA : NSObject
{
ClassB *b;
}
@end

【ClassB.h】
#include "ClassA.h"
@interface ClassB : NSObject
{
ClassA *a;
}
@end






こんなときには、#includeではなく @class ClassA; 等の表記を使う。というか、#include は実装ファイル側に持って行った方がいいとのこと。




通常、インタフェースファイルで @class を使ってクラスを宣言し、(それらのクラスのインスタンスを作成したり、メッセージを送信する必要があるため)対応する実装ファイルでそれらのインタフェースをインポートします。