为什么@class在objective-c中使用

时间:2012-05-30 03:17:25

标签: iphone ios compiler-directives

  

可能重复:
  @class May I know the proper use of this

我想知道为什么要使用@class。我有一个大致的了解,它允许你访问你所调用的类中的东西,但是我不知道它的好处..

2 个答案:

答案 0 :(得分:12)

@class指令设置对另一个类的前向引用。它告诉编译器命名类是存在的,所以当编译器到达时,比如一个@property指令行,不需要额外的信息,它假定一切都很好并且继续前进。

例如,这段代码可以自行运行:

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

@interface CFExampleClass : NSObject <SomeDelegate> {
}

@property (nonatomic, strong) MyExampleClass *example;

@end

但是,我们要避免循环地包含这些标头(EG CFExampleClass导入MyExampleClassMyExampleClass导入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,它具有该引用,并且将无限期地执行此操作。

相反,通过不导入类,可以避免此问题。