首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >@class在Objective-C中做什么?

@class在Objective-C中做什么?
EN

Stack Overflow用户
提问于 2010-10-11 16:36:21
回答 4查看 21.1K关注 0票数 57

谁能给我解释一下@class声明在Objective-C中是做什么的,在什么情况下我们应该使用这个声明?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-11 16:48:22

这是一个转发声明。它本质上是告诉编译器有一个同名的类。我在接口声明中使用它:

代码语言:javascript
复制
@class Foo;
@interface Bar : NSObject {
    Foo *someFoo;
}
@end

当然,您也可以改为导入Foo的头部:

代码语言:javascript
复制
#import "Foo.h"
@interface Bar : NSObject {
    Foo *someFoo;
}
@end

但是如果someFoo没有向Bar用户公开,他们就会导入一个对他们没有用处的额外头文件。使用@class声明,Bar的用户不会看到额外的导入,因为Foo.h将被导入到Bar的实现文件中。

票数 99
EN

Stack Overflow用户

发布于 2010-10-11 16:52:03

它被称为转发声明。

您可以使用此指令告诉编译器有一个具有指定名称的objc类。您的其他选择是包含接口,或者将id用于变量或类型。

这有助于最小化依赖项。只要有可能,我就会使用它们来最小化依赖,并显著减少构建时间。

它与c和c++中的相同:

代码语言:javascript
复制
struct mon_struct;
namespace MON { class mon_class; }
票数 26
EN

Stack Overflow用户

发布于 2014-08-22 15:15:57

我希望这能帮到更多的忙

上面的答案已经说明了几乎所有的事情,我想在上面补充一些东西。

@class Foo是Foo类的向前声明。这就像是告诉编译器,foo类是存在的,所以现在不用担心了。

注意:-当两个类相互需要时,类声明变得非常关键。如果我们使用常见的#import语句,那么我们将会有一个无限的导入循环,而编译器不喜欢无休止的循环。所以我们使用@class Classname

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3904663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档