Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在头文件中包含头文件_Iphone_Objective C_Ios_C_Cocoa Touch - Fatal编程技术网

Iphone 在头文件中包含头文件

Iphone 在头文件中包含头文件,iphone,objective-c,ios,c,cocoa-touch,Iphone,Objective C,Ios,C,Cocoa Touch,这个问题可能看起来很傻,但我不清楚我会毫不犹豫地问这个问题。在一个或多个头文件中包含头文件,这是一个好的做法。通常我认为这不是一个好办法。在某些情况下,它需要包含头文件 eg: @property (strong, nonatomic) AVAudioPlayer *audio_player; 假设我有这样的属性,当我在.mm文件中包含它相应的头文件时,Xcode在.h文件中显示未声明的错误,所以我在这里被迫在.h文件中包含它的头文件。由于这个原因,无论我在哪里包括这个类,我也包括间接音频播放

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

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

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

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


这背后的逻辑是,您可能希望从另一个类访问类实例的
audio\u player
属性,如果您没有这样做,那么属性的类型将是未声明的。

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


这背后的逻辑是,您可能希望从另一个类访问类实例的
audio\u player
属性,如果您没有这样做,那么属性的类型将是未声明的。

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

<> P> > C和C++,将头文件内容封装成<代码> > IFDEF <代码> >代码>“Endof块”,避免多个声明(查看任何常见的C/C++头,包括标准库中的那些)。
在Objective-C中,
#ifdef
#endif括号通常是不必要的,因为在Objective-C中,您通常使用
导入
而不是
包含
,并且导入文件保证只发生一次,无论导入多少次。

包含来自其他头文件的头文件非常常见档案

<> P> > C和C++,将头文件内容封装成<代码> > IFDEF <代码> >代码>“Endof块”,避免多个声明(查看任何常见的C/C++头,包括标准库中的那些)。
在Objective-C中,
#ifdef
#endif括号通常是不必要的,因为在Objective-C中,您通常使用
导入
而不是
包含
,并且导入文件保证只发生一次,无论执行多少次。

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


转发声明还促进了代码重用,因为如果您试图将一个项目分为两个独立的项目,您会发现,您通过在方便的地方插入导入而“节省”的所有时间都将被以下事实所抵消:您现在必须添加/删除导入以反映新的程序结构。有了前瞻性声明,联系更加清晰,维护也最小化。基本上,过度的导入会促进不必要的耦合。

我发现前向声明更可取,因为它们减少了头文件更改时的编译时间,尤其是在大型项目中,受影响的.m文件的数量似乎随着修改的.h文件数量的线性增加而呈几何增长


转发声明还促进了代码重用,因为如果您试图将一个项目分为两个独立的项目,您会发现,您通过在方便的地方插入导入而“节省”的所有时间都将被以下事实所抵消:您现在必须添加/删除导入以反映新的程序结构。有了前瞻性声明,联系更加清晰,维护也最小化。基本上,过度的#导入会促进不必要的耦合。

我已经对此做出了预先声明。很好。可以吗?@user1587011是的,它也很好,但只有当您不想以后使用该属性时(即调用该属性上的方法、使用其访问器等),只要您确实在项目中的某个位置导入该文件,转发声明就可以了——例如,在.h文件中转发声明类,在.m文件中导入。就我个人而言,我发现它只是让代码变得有点混乱,让更改变得更痛苦,但这样做应该是完全好的。我已经为此给出了声明。很好。可以吗?@user1587011是的,它也很好,但只有当您不想以后使用该属性时(即调用该属性上的方法、使用其访问器等),只要您确实在项目中的某个位置导入该文件,转发声明就可以了——例如,在.h文件中转发声明类,在.m文件中导入。就我个人而言,我发现它只是让代码有点混乱,让更改变得更痛苦,但这样做应该是完全好的。