0

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

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

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

4

3 回答 3

4

包含来自其他头文件的头文件是很常见的。

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

在 Objective-C 中,#ifdef #endif通常不需要括号,因为在 Objective C 中,您通常使用import而不是include导入文件,并且无论执行多少次,都保证只发生一次。

于 2012-09-18T05:17:03.390 回答
1

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

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

于 2012-09-18T05:10:21.530 回答
0

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

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

于 2012-09-27T08:09:56.480 回答