@class和#imports之间的区别

时间:2011-12-05 17:38:30

标签: c++ objective-c cocoa

有人可以解释使用#import语句包含额外的头文件和使用@class之间的区别。例如

//MyClass.h

#import <Foundation/foundation.h>
#import "someOtherClass.h"

OR

//MyClass.m

#import"MyClass.h"
@class someOtherClass

implementation

当我尝试使用第二种方法时,它并不总是有效。

如果相同的概念适用于同一场景的C ++

,我现在也想

由于

2 个答案:

答案 0 :(得分:7)

@class被称为forward declaration,表示你想使用该类型,但没有任何接口细节(即你不知道它的方法和属性)。

#import是一个预处理器语句(非常类似于#include),并且在编译时它将被替换为您要导入的文件的内容,并且您可以访问该类型及其接口(即。你会知道它的方法和属性。)

两者之间的区别在于您希望将多少信息传递给使用您的班级的代码。

<强>示例:

在.h文件中声明私有ivars时使用@class。将它与.m中的#import语句配对。这将加速编译,它确实有助于代码可读性。

当需要使用类的接口的详细信息时,在.h文件中使用#import。这就是为什么你必须#import原型,因为你需要知道编译器的接口细节,知道你是否正在实现所需的方法。

您还想要#import超类,因为polymorphism需要它的接口详细信息。

答案 1 :(得分:-3)

如果对于C ++的Objective C和C ++有不同的答案,请参阅链接

#import是微软特有的,我非常不鼓励使用它。

尽管#include符合标准且被所有主要编译器实现使用,但坚持这一点。

重复:C++ include and import difference 比较两者。