我想知道为什么要使用@class。我有一个大致的了解,它允许你访问你所调用的类中的东西,但是我不知道它的好处..
答案 0 :(得分:12)
@class
指令设置对另一个类的前向引用。它告诉编译器命名类是存在的,所以当编译器到达时,比如一个@property
指令行,不需要额外的信息,它假定一切都很好并且继续前进。
例如,这段代码可以自行运行:
#import <UIKit/UIKit.h>
#import "MyExampleClass"
@interface CFExampleClass : NSObject <SomeDelegate> {
}
@property (nonatomic, strong) MyExampleClass *example;
@end
但是,我们要避免循环地包含这些标头(EG CFExampleClass
导入MyExampleClass
和MyExampleClass
导入CFExampleClass
),然后我们可以使用@class
告诉编译器MyExampleClass
存在而没有任何投诉。
#import <UIKit/UIKit.h>
@class MyExampleClass;
@interface CFExampleClass : NSObject <SomeDelegate> {
}
@property (nonatomic, strong) MyExampleClass *example;
@end
答案 1 :(得分:4)
存在@class指令以避免创建循环依赖。
例如,如果A类需要访问B类,而B类需要访问A类,那么您需要将A类导入B,B导入A. 链接器将从A类转到B类,然后从B转到A,它具有该引用,并且将无限期地执行此操作。
相反,通过不导入类,可以避免此问题。