Objective-C:在.h或.m中导入标头?

时间:2009-05-14 15:02:33

标签: objective-c

我是objective-c的新手,想知道导入我在课堂上使用的一些外部标题的最佳做法。

我应该将#import“classB.h”存储在我自己的.h文件中还是在.m文件中?

有什么区别?

谢谢!

4 个答案:

答案 0 :(得分:35)

正确的做法是在标题中添加前瞻性类声明(@class classB;),在.m中放置#import "classB.h

正向类声明,如@class classB;,让编译器知道它应该在以后期望该类,并且它现在不应该抱怨它。

答案 1 :(得分:12)

为避免循环引用,只有#emport从另一个类的头文件中导入头文件(如果它继承自该类)。否则,如果您需要在头文件中使用@class ClassName来声明类类型,并在实现文件中#import它。

答案 2 :(得分:4)

对编译器来说,这没关系。你可以在你的.h中抛出声明,然后等到#import直到你的.m文件。有关详细信息,请参阅SO上的this帖子。

从清洁代码的角度来看,有些人可能会认为将导入文件放在您的实现文件中会使详细信息更接近于需要的位置(请参阅上面的链接;那里的人都参考了这个想法)。

答案 3 :(得分:2)

建议您在头文件中导入其他头文件。这样您就可以在头文件和实现文件中使用该类(因为实现文件(.m)导入其关联的头文件)。

如果您想知道何时导入文件以及何时使用前向声明,您可以转到here。 ; - )