重複の可能性:
@class これの正しい使い方を教えてください
なぜ @class が使用されるのか疑問に思っています。呼び出すクラス内のものにアクセスできることは一般的に理解していますが、その利点はわかりません..
重複の可能性:
@class これの正しい使い方を教えてください
なぜ @class が使用されるのか疑問に思っています。呼び出すクラス内のものにアクセスできることは一般的に理解していますが、その利点はわかりません..
この@class
ディレクティブは、別のクラスへの前方参照を設定します。これは、指定されたクラスが存在することをコンパイラーに伝えるため、コンパイラーが@property
ディレクティブ行などに到達した場合、追加情報は必要なく、すべてが順調であると想定して処理を進めます。
たとえば、次のコードは単独で問題なく動作します。
#import <UIKit/UIKit.h>
#import "MyExampleClass"
@interface CFExampleClass : NSObject <SomeDelegate> {
}
@property (nonatomic, strong) MyExampleClass *example;
@end
しかし、これらのヘッダー (EG CFExampleClass
importsMyExampleClass
およびMyExampleClass
imports CFExampleClass
) を循環的にインクルードすることを避けたい場合は、 を使用@class
してコンパイラにMyExampleClass
問題なく存在することを伝えることができます。
#import <UIKit/UIKit.h>
@class MyExampleClass;
@interface CFExampleClass : NSObject <SomeDelegate> {
}
@property (nonatomic, strong) MyExampleClass *example;
@end
@class ディレクティブは、循環依存関係の作成を回避するために存在します。
たとえば、クラス A がクラス B にアクセスする必要があり、クラス B がクラス A にアクセスする必要がある場合、クラス A を B にインポートし、B を A にインポートする必要があります。
リンカはクラス A からクラス B に移動し、次にB からその参照を持つ A に移動し、これを無期限に実行します。
代わりに、クラスをインポートしないことで、この問題を回避できます。