0
@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”,这是什么意思?

4

1 回答 1

0

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

不过,如果是这种情况,那么我不知道他们为什么使用前向声明 with ,因为没有指令@interface它的工作原理是一样的。@class

我是这么看的。

他们首先使用前向声明。然后他们注意到编译器给出了警告Receiver 'GSValue' is a forward class and corresponding @interface may not exist,所以他们添加了@interface部分,但是忘记了或者懒得删除以前的@class指令。

于 2013-01-16T16:42:30.857 回答