可能重复:
@class 我可以知道这个的正确用法吗
我想知道为什么使用@class。我有一个普遍的理解,它允许你访问你调用的那个类中的东西,但是我不知道它的好处..
可能重复:
@class 我可以知道这个的正确用法吗
我想知道为什么使用@class。我有一个普遍的理解,它允许你访问你调用的那个类中的东西,但是我不知道它的好处..
该@class
指令设置对另一个类的前向引用。它告诉编译器命名的类存在,所以当编译器到达,比如说一个@property
指令行,不需要额外的信息,它假设一切都很好并继续前进。
例如,此代码本身可以正常工作:
#import <UIKit/UIKit.h>
#import "MyExampleClass"
@interface CFExampleClass : NSObject <SomeDelegate> {
}
@property (nonatomic, strong) MyExampleClass *example;
@end
但是,假设我们想要避免循环包含这些头文件(EGCFExampleClass
导入MyExampleClass
和MyExampleClass
导入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,它有那个参考,并且会无限期地这样做。
相反,通过不导入类,您可以避免这个问题。