有人可以解释使用#import语句包含额外的头文件和使用@class之间的区别。例如
//MyClass.h
#import <Foundation/foundation.h>
#import "someOtherClass.h"
OR
//MyClass.m
#import"MyClass.h"
@class someOtherClass
implementation
当我尝试使用第二种方法时,它并不总是有效。
如果相同的概念适用于同一场景的C ++
,我现在也想由于
答案 0 :(得分:7)
@class被称为forward declaration,表示你想使用该类型,但没有任何接口细节(即你不知道它的方法和属性)。
#import是一个预处理器语句(非常类似于#include),并且在编译时它将被替换为您要导入的文件的内容,并且您可以访问该类型及其接口(即。你会知道它的方法和属性。)
两者之间的区别在于您希望将多少信息传递给使用您的班级的代码。
<强>示例:强>
在.h文件中声明私有ivars时使用@class。将它与.m中的#import语句配对。这将加速编译,它确实有助于代码可读性。
当需要使用类的接口的详细信息时,在.h文件中使用#import。这就是为什么你必须#import原型,因为你需要知道编译器的接口细节,知道你是否正在实现所需的方法。
您还想要#import超类,因为polymorphism需要它的接口详细信息。
答案 1 :(得分:-3)
#import是微软特有的,我非常不鼓励使用它。
尽管#include符合标准且被所有主要编译器实现使用,但坚持这一点。
重复:C++ include and import difference 比较两者。