@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
编译器指令来做到这一点。
当你知道实现的时候,你可以实现这个类。