使用@ class- @接口对时,编译器有什么帮助?

时间:2013-01-16 16:18:29

标签: objective-c gnustep

@class  GSValue;
@interface GSValue : NSObject   // Help the compiler
@end
@class  GSNonretainedObjectValue;
@interface GSNonretainedObjectValue : NSObject  // Help the compiler
@end

来自NSValue.m的上述代码。我谷歌并给我一些信息,它表明@class(不附带@interface)用于两个类之间的类前向声明​​,但只声明为类的指针。我的问题是为什么" @class GSValue;"紧接着是" @interface GSValue:NSObject",这是什么意思?

1 个答案:

答案 0 :(得分:0)

我不太确定,但我认为在这种情况下它是前向声明+声明,GSValue和其他类是NSObject的子类。因此,编写[GSValue class]时编译器不会发出警告。它实际上并不是“帮助”,只是为了摆脱警告。

但是,如果是这种情况,那么我不知道为什么他们使用@interface的前向声明,因为它在没有@class指令的情况下工作正常。

我是这样看的。

他们首先使用了前瞻性声明。然后他们注意到编译器发出警告Receiver 'GSValue' is a forward class and corresponding @interface may not exist,因此他们添加了@interface个部分,但忘记了或者没有删除以前的@class指令。