3

重複の可能性:
@class これの正しい使い方を教えてください

なぜ @class が使用されるのか疑問に思っています。呼び出すクラス内のものにアクセスできることは一般的に理解していますが、その利点はわかりません..

4

2 に答える 2

12

この@classディレクティブは、別のクラスへの前方参照を設定します。これは、指定されたクラスが存在することをコンパイラーに伝えるため、コンパイラーが@propertyディレクティブ行などに到達した場合、追加情報は必要なく、すべてが順調であると想定して処理を進めます。

たとえば、次のコードは単独で問題なく動作します。

#import <UIKit/UIKit.h>
#import "MyExampleClass"

@interface CFExampleClass : NSObject <SomeDelegate> {
}

@property (nonatomic, strong) MyExampleClass *example;

@end

しかし、これらのヘッダー (EG CFExampleClassimportsMyExampleClassおよびMyExampleClassimports CFExampleClass) を循環的にインクルードすることを避けたい場合は、 を使用@classしてコンパイラにMyExampleClass問題なく存在することを伝えることができます。

#import <UIKit/UIKit.h>
@class MyExampleClass;

@interface CFExampleClass : NSObject <SomeDelegate> {
}

@property (nonatomic, strong) MyExampleClass *example;

@end
于 2012-05-30T03:19:43.823 に答える
4

@class ディレクティブは、循環依存関係の作成を回避するために存在します。

たとえば、クラス A がクラス B にアクセスする必要があり、クラス B がクラス A にアクセスする必要がある場合、クラス A を B にインポートし、B を A にインポートする必要があります。
リンカはクラス A からクラス B に移動し、次にB からその参照を持つ A に移動し、これを無期限に実行します。

代わりに、クラスをインポートしないことで、この問題を回避できます。

于 2012-05-30T03:20:34.310 に答える