@class和#imports之间的区别

Mie*_*iek 1 c++ cocoa objective-c

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

//MyClass.h

#import <Foundation/foundation.h>
#import "someOtherClass.h"
Run Code Online (Sandbox Code Playgroud)

要么

//MyClass.m

#import"MyClass.h"
@class someOtherClass

implementation
Run Code Online (Sandbox Code Playgroud)

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

如果相同的概念适用于同一场景的C++,我现在也想

谢谢

ben*_*ord 7

@class被称为前向声明,表示您想使用该类型,但没有任何接口细节(即,您不知道它的方法和属性).

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

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

例子:

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

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

您还需要#import superclasses,因为多态性需要它的接口详细信息.