在头文件中包含头文件

时间:2012-09-18 05:08:35

标签: iphone objective-c ios c cocoa-touch

这个问题可能看起来很傻,但我不清楚我会毫不犹豫地提出这个问题。在另一个头文件中包含头文件,这是一个好习惯。通常我认为这不是一个好方法。在某些情况下,它需要包含头文件。

eg: @property (strong, nonatomic) AVAudioPlayer *audio_player;

考虑我有这样的属性,当我在.mm文件中包含相应的头文件时,Xcode在.h文件中显示未声明的错误,所以我在这里强制将其头文件包含在.h文件中。因为这个,无论我在哪个类,我也包括间接音频播放器头文件,它可能不需要在该类。我们怎么能避免这种情况。或者我可以这样继续......?请提供建议。

3 个答案:

答案 0 :(得分:4)

包含其他头文件中的头文件非常常见。

对于C和C ++,通常将标头内容包装到#ifdef #endif块中以避免多个声明(查看任何常见的c / c ++标头,包括标准库中的标头)。 / p>

在Objective-C中,#ifdef #endif包围通常不是必需的,因为在目标C中您通常使用import而不是include,并且保证导入文件不管它做了多少次都只有一次。

答案 1 :(得分:1)

你不必避免这种情况。这是完全合法和惯用的。

这背后的逻辑是你可能想要从另一个类访问你的类实例的audio_player属性,如果你不这样做,那么属性的类型将是未声明的。

答案 2 :(得分:0)

我发现前向声明是首选,因为它们会减少头文件更改时的编译时间,特别是对于较大的项目,其中受影响的.m文件的数量似乎随着修改后的数量的每次线性增加而几何增长。文件。

前向声明还会促进代码重用,因为如果您尝试将项目分成两个单独的项目,您会发现只需在方便的位置投入导入就“保存”的所有时间都将被您的事实所抵消现在必须添加/删除导入以反映新的程序结构。通过前向声明,链接更清晰,维护最小化。基本上过多的#importing促进了不必要的耦合。