@class在Objective-C中做什么?

任何人都可以向我解释一下@class声明做了什么目标以及我们应该如何使用这个声明。

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

@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的实现文件中。

它被称为前向声明。

你使用这个指令来告诉编译器有一个objc类,并且指定了这个名字。 你的其他选项是包含接口,或使用variables或types的ID。

这有助于最小化依赖关系。 我尽可能地使用它们来最小化依赖关系,并大大减less构build时间。

它和c和c ++一样:

 struct mon_struct; namespace MON { class mon_class; } 

希望这会有所帮助

上面的答案已经几乎每一件事情,我想补充一些事情。

@class Foo是Foo类的前向声明。 这就像告诉编译器,foo类的存在所以现在不要打扰。

注意: – 类的声明变得非常重要,当两个类需要彼此。 如果我们通常执行#import语句,那么我们将会有一个无限循环的导入,编译器不喜欢无限循环。 所以我们使用@class Classname

@class用于创build任何类的前向声明。 如果你正在创build任何类的实现是你所不知道的,那么你可以使用@class编译器指令来做到这一点。

当你知道实现的时候,你可以实现这个类。