何时在实现文件中包含#import

uta*_*hak 2 objective-c

学习Objective-C和其他基于c的语言我了解到你应该将#includes和#imports放在头文件中.@class也去了那里.最近查看来自苹果和网络上其他来源的示例代码,@ class在标题中,所有导入都在实现文件中.

哪个是对的?两者都有原因吗?如果要导入头文件,为什么还需要提供@class声明.

Car*_*rum 7

两种情况都不是"更正确",这两种行为都有明显的原因.例如,考虑一下你有两个类的情况,每个类都有一个对另一个类型的对象的引用:

ClassA.h:

@interface ClassA : NSObject
{
  ClassB *b;
}
Run Code Online (Sandbox Code Playgroud)

ClassB.h:

@interface ClassB : NSObject
{
  ClassA *a;
}
Run Code Online (Sandbox Code Playgroud)

此代码将无法编译 - 您在这些标头中具有循环依赖关系.解决方案是使用@class指令转发声明所需的类.

在这里你可能会喜欢的情形#import也许空调风格函数或枚举类型或东西-如果你有一些共同的代码除了刚才您所关心的其他头一个类名指令在头文件可能.