任何人都可以请解释一下@class声明在目标&中做些什么我们应该使用这个声明的情况是什么。@class在Objective-C中做什么?
44
A
回答
83
这是一个前向声明。它基本上告诉编译器有一个这样的名字。我用它在接口声明:
@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
的实现文件中。
23
它被称为前向声明。
你使用这个指令告诉编译器有一个objc类和指定的名字。你的其他选项是包含接口,或使用变量或类型的id。
这有助于最小化依赖性。只要我能够最大限度地减少依赖关系,就可以使用它们,并大大减少构建时间
它等同于C和C++:
struct mon_struct;
namespace MON { class mon_class; }
+3
+1小费,这应该是首选,以减少构建时间。 – 2010-10-11 14:23:03
1
@class
用于创建提出任何类的声明。如果您创建的任何类的实现不为您所知,那么您可以使用@class
编译器指令来执行此操作。
当你知道实现时,你可以实现这个类。
8
希望这将有助于更多一点
上面的回答已经说明几乎所有的事情,我想补充一些关于它的事情。
的@class Foo
是Foo类的前向声明。这就像告诉编译器,foo类存在所以现在不要为此烦恼。
注意: - 当两个类互相需要时,类声明变得非常重要。如果我们通常执行#import语句,那么我们会有一个无限循环的导入,并且编译器不喜欢无限循环。所以我们使用@class Classname
。
相关问题
- 1. class =“”做什么?
- 2. 在Class中Class Class <:: OtherClassName是做什么的?
- 3. 什么是ObjectiveC中的retainCount?
- 4. class class [B在Java中代表什么?
- 5. 是什么`class`做伊莎贝尔
- 6. Class :: MethodMaker究竟做了什么?
- 7. 有什么叫做Local Static Inner Class?
- 8. 在Perl中做什么=〜做什么?
- 9. 在dotnetnuke的Custom Bussiness Object Class中可以做些什么改进?
- 10. 这种格式在CSS中做了什么:p [class | = abc]?
- 11. 在ObjectiveC中做BDD时嘲笑合作者的最好方法是什么?
- 12. ObjectiveC如何实现class_createInstance(Class cls,size_t extraBytes)?
- 13. 为什么“[self class] == [super class]”?
- 14. Class是什么?
- 15. 如果body class等于X,那么做些什么?
- 16. 什么是string.indexOf(“*。”)在Javascript中做什么?
- 17. 什么是outData.writeInt()在Java中做什么?
- 18. 什么(数组)在PHP中做什么?
- 19. 什么是String.iter()在Rust中做什么?
- 20. 为什么需要Thread .__ init __()在Class中?
- 21. 为什么getResourceAsStream方法在Class类中?
- 22. 为什么有些事情我不能在C#中的CLASS SCOPE中做?
- 23. “Class POCO”是什么?
- 24. Class clazz和Class <?> clazz在java中有什么区别?
- 25. 在R中,class ts和class timeSeries之间有什么区别?
- 26. 在ObjectiveC中使用指针的最大优势是什么
- 27. “+”在CSS中做了什么?
- 28. '@'在c#中做什么?
- 29. 什么 - 在Excel中做?
- 30. 在JavaScript中做什么“杀”?
明智的解释,刚刚学到了新东西!谢谢 – pnizzle 2013-05-31 00:13:35
我还没有完全理解它,我知道它的一个旧帖子,但例子会很好。 “酒吧的用户”是什么意思,这些课程将酒吧作为其中的一个对象?在你的例子中,Imean是Bar中的一个对象。那么在这种情况下,在#import和@class之间的区别是什么? – Esko918 2015-08-20 23:07:38
确实是一个很好的解释。我之前遇到过一个我应该使用它的情况。无论如何,现在我当然可以。 :) – Ron 2017-04-25 15:50:44