谁能给我解释一下@class声明在Objective-C中是做什么的,在什么情况下我们应该使用这个声明?
发布于 2010-10-11 16:48:22
这是一个转发声明。它本质上是告诉编译器有一个同名的类。我在接口声明中使用它:
@class Foo;
@interface Bar : NSObject {
Foo *someFoo;
}
@end当然,您也可以改为导入Foo的头部:
#import "Foo.h"
@interface Bar : NSObject {
Foo *someFoo;
}
@end但是如果someFoo没有向Bar用户公开,他们就会导入一个对他们没有用处的额外头文件。使用@class声明,Bar的用户不会看到额外的导入,因为Foo.h将被导入到Bar的实现文件中。
发布于 2010-10-11 16:52:03
它被称为转发声明。
您可以使用此指令告诉编译器有一个具有指定名称的objc类。您的其他选择是包含接口,或者将id用于变量或类型。
这有助于最小化依赖项。只要有可能,我就会使用它们来最小化依赖,并显著减少构建时间。
它与c和c++中的相同:
struct mon_struct;
namespace MON { class mon_class; }发布于 2014-08-22 15:15:57
我希望这能帮到更多的忙
上面的答案已经说明了几乎所有的事情,我想在上面补充一些东西。
@class Foo是Foo类的向前声明。这就像是告诉编译器,foo类是存在的,所以现在不用担心了。
注意:-当两个类相互需要时,类声明变得非常关键。如果我们使用常见的#import语句,那么我们将会有一个无限的导入循环,而编译器不喜欢无休止的循环。所以我们使用@class Classname。
https://stackoverflow.com/questions/3904663
复制相似问题