这个问题可能看起来很傻,但我不清楚我会毫不犹豫地提出这个问题。在另一个头文件中包含头文件,这是一个好习惯。通常我认为这不是一个好方法。在某些情况下,它需要包含头文件。
eg: @property (strong, nonatomic) AVAudioPlayer *audio_player;
考虑我有这样的属性,当我在.mm文件中包含相应的头文件时,Xcode在.h文件中显示未声明的错误,所以我在这里强制将其头文件包含在.h文件中。因为这个,无论我在哪个类,我也包括间接音频播放器头文件,它可能不需要在该类。我们怎么能避免这种情况。或者我可以这样继续......?请提供建议。
答案 0 :(得分:4)
包含其他头文件中的头文件非常常见。
对于C和C ++,通常将标头内容包装到#ifdef
#endif
块中以避免多个声明(查看任何常见的c / c ++标头,包括标准库中的标头)。 / p>
在Objective-C中,#ifdef
#endif
包围通常不是必需的,因为在目标C中您通常使用import
而不是include
,并且保证导入文件不管它做了多少次都只有一次。
答案 1 :(得分:1)
你不必避免这种情况。这是完全合法和惯用的。
这背后的逻辑是你可能想要从另一个类访问你的类实例的audio_player
属性,如果你不这样做,那么属性的类型将是未声明的。
答案 2 :(得分:0)
我发现前向声明是首选,因为它们会减少头文件更改时的编译时间,特别是对于较大的项目,其中受影响的.m文件的数量似乎随着修改后的数量的每次线性增加而几何增长。文件。
前向声明还会促进代码重用,因为如果您尝试将项目分成两个单独的项目,您会发现只需在方便的位置投入导入就“保存”的所有时间都将被您的事实所抵消现在必须添加/删除导入以反映新的程序结构。通过前向声明,链接更清晰,维护最小化。基本上过多的#importing促进了不必要的耦合。