任何人都可以请解释一下@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. <class'super'> class在python中做什么?
- 4. class tf.train.Coordinator和class tf.train.QueueRunner在tensorflow中做了什么?
- 5. 什么是ObjectiveC中的retainCount?
- 6. class class [B在Java中代表什么?
- 7. Class :: MethodMaker究竟做了什么?
- 8. 有什么叫做Local Static Inner Class?
- 9. 是什么`class`做伊莎贝尔
- 10. 为什么Puppet类叫做class?
- 11. 在Perl中做什么=〜做什么?
- 12. 这种格式在CSS中做了什么:p [class | = abc]?
- 13. @class在iOS 4开发中做了什么?
- 14. 在协议声明中,`:class`做了什么?
- 15. 在dotnetnuke的Custom Bussiness Object Class中可以做些什么改进?
- 16. 在ObjectiveC中做BDD时嘲笑合作者的最好方法是什么?
- 17. ObjectiveC如何实现class_createInstance(Class cls,size_t extraBytes)?
- 18. 为什么“[self class] == [super class]”?
- 19. Class是什么?
- 20. 'export declare class Actions'中的'declare'是做什么的?
- 21. 如果body class等于X,那么做些什么?
- 22. 什么!=在玉/帕格中做什么?
- 23. 什么是opt.apply_gradients()在TensorFlow中做什么?
- 24. 什么是string.indexOf(“*。”)在Javascript中做什么?
- 25. 是什么。在Haskell中做什么?
- 26. 什么是outData.writeInt()在Java中做什么?
- 27. 什么?=在Makefile中做什么?
- 28. 什么是:%S在vim中做什么?
- 29. 什么(数组)在PHP中做什么?
- 30. 什么_,在Python中做什么
明智的解释,刚刚学到了新东西!谢谢 – 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