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

C.J*_*hns 3 iphone compiler-directives ios

可能重复:
@class我可以知道正确使用它

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

Cod*_*aFi 12

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

例如,这段代码可以自行正常工作:

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

@interface CFExampleClass : NSObject <SomeDelegate> {
}

@property (nonatomic, strong) MyExampleClass *example;

@end
Run Code Online (Sandbox Code Playgroud)

但是,假设我们想要避免循环地包含这些标题(EG CFExampleClass导入MyExampleClassMyExampleClass导入CFExampleClass),那么我们可以@class用来告诉编译器MyExampleClass存在而没有任何抱怨.

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

@interface CFExampleClass : NSObject <SomeDelegate> {
}

@property (nonatomic, strong) MyExampleClass *example;

@end
Run Code Online (Sandbox Code Playgroud)

  • 它还消除了循环引用的任何可能性.如果在"MyClassB"中引用了"MyClassA",反之亦然,则会出现错误.使用`@ class`允许编译器知道该类是否存在而不导入它. (2认同)