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

但是,假设我们想要避免循环包含这些头文件(EGCFExampleClass导入MyExampleClassMyExampleClass导入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 回答