任何人都可以解释我@class在Objective-C中做什么声明以及我们应该使用这个声明的情况是什么?
zou*_*oul 95
这是一个前瞻性声明.它基本上告诉编译器有一个类的名称.我在接口声明中使用它:
@class Foo;
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Run Code Online (Sandbox Code Playgroud)
当然你可以导入标题Foo:
#import "Foo.h"
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Run Code Online (Sandbox Code Playgroud)
但如果someFoo没有向用户公开Bar,他们会导入一个对他们没用的额外头文件.随着@class声明用户Bar看到没有额外的导入,因为Foo.h将导入在实现文件中Bar.
jus*_*tin 24
它被称为前瞻性声明.
您使用此指令告诉编译器存在指定名称的objc类.您的其他选项是包括接口,或使用id作为变量或类型.
这有助于最小化依赖性.每当我能够最小化依赖性时,我就会使用它们,并显着减少构建时间.
它与c和c ++中的相同:
struct mon_struct;
namespace MON { class mon_class; }
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助
以上答案已经说明了几乎所有的事情,我想在其上添加一些东西.
这@class Foo 是Foo类的前向声明.这就像告诉编译器,foo类存在所以现在不要理会它.
注意: - 当两个类彼此需要时,类声明变得非常关键.如果我们通常使用#import语句,那么我们将拥有无限循环的导入,编译器不喜欢无限循环.所以我们用@class Classname.
| 归档时间: |
|
| 查看次数: |
18642 次 |
| 最近记录: |