这个问题可能看起来很傻,但是我不清楚我会毫不犹豫地问这个问题。将头文件包含在另一个头文件中,这是一个好的做法吗?通常我猜这不是一个好的方法。在某些情况下,需要包含头文件。
eg: @property (strong, nonatomic) AVAudioPlayer *audio_player;考虑到我有这样的属性,当我在.mm文件中包含它对应的头文件时,Xcode在.h文件中显示未声明的错误,所以我被迫在.h文件中包含它的头文件。正因为如此,无论我在哪里包含这个类,我也间接地包含了音频播放器的头文件,它可能不需要在那个类中。我们怎样才能避免这种情况。或者我可以这样做...?请提供建议。
发布于 2012-09-18 13:10:22
你不必避免这一点。这是完全合法和惯用的。
这背后的逻辑是,您可能希望从另一个类访问您的类的实例的audio_player属性,如果您没有这样做,那么该属性的类型将是未声明的。
发布于 2012-09-18 13:17:03
包含来自其他头文件的头文件是很常见的。
对于C和C++,通常将头内容包装到#ifdef #endif块中,以避免多个声明(查看任何常见的c/c++头,包括来自标准库的头)。
在Objective-C中,#ifdef #endif括号通常是不必要的,因为在objective C中,您通常使用import而不是include,并且无论导入文件多少次,都保证只发生一次。
发布于 2012-09-27 16:09:56
我发现正向声明是首选的,因为它们减少了头文件更改时的编译时间,特别是在较大的项目中,受影响的.m文件的数量似乎随着修改的.h文件数量的每线性增加而呈几何级数增长。
正向声明还促进了代码重用,因为如果您尝试将一个项目划分为两个单独的项目,您会发现,通过在方便的地方添加导入而“节省”的所有时间都将被您现在必须添加/删除导入以反映新程序结构的事实所抵消。使用forward声明,这种联系更加清晰,并且它们的维护也被最小化。基本上,过度的#导入会导致不必要的耦合。
https://stackoverflow.com/questions/12470702
复制相似问题