26

在 Xcode 的“Copy Headers”阶段,“Project”部分和“Private”部分下的 headers 有什么区别?你想什么时候使用每个?

另外,我可以理解您为什么要复制公共标头(例如对于静态库)-但是为什么要复制私有标头?

编辑: @mipadi 下面解释了公共和私有部分的角色。但是,我仍然缺少在“项目”部分中包含标题与在“复制标题”阶段的任何部分中没有标题之间的区别。

4

4 回答 4

16

如果公共标头包含私有标头,则必须复制私有标头,但您要确保库或框架的使用者知道这些私有标头不是公共 API 的一部分。

“项目”标头是包含在公共标头中的私有标头(它们通常是内部实现的一部分,因此仅包含在实现.c.m文件中)。

在构建框架时,公共头文件被复制到Headers框架的目录中,而私有头文件被复制到PrivateHeaders目录中。

于 2012-05-14T16:35:03.880 回答
6

@Danra,如果您将标题放在“项目”下,则这些标题将对您的实现可见,无论标题的实际位置如何。

假设您的文件夹结构如下: /Sources/libAF/AFSomething.h /Sources/libAF/AFSomething.m /Sources/exec/main.m

如果您将“AFSomething.h”放在“项目”下,则可以在 main.m 中像这样使用它:#import "AFSomething.h"

用外行的话来说,Xcode 将包含项目标头,尽管您省略了实际的路径信息。

于 2013-06-28T14:43:16.413 回答
0

设置头文件的可见性

  • 公开:界面已完成,旨在供您产品的客户使用。公共标头包含在产品中,作为不受限制的可读源代码。

  • 私有:该界面不适用于您的客户,或者它处于开发的早期阶段。产品中包含一个私有标头,但它被标记为“私有”。因此,这些符号对所有客户都是可见的,但客户应该明白他们不应该使用它们。

  • 项目:该接口仅供当前项目中的实现文件使用。项目标头不包括在目标中,除了在目标代码中。这些符号对客户根本不可见,只有您自己可见。

于 2012-05-26T03:37:02.830 回答
0

除此之外,通常人们有一个脚本来“清理”私有标题,这样公众就无法看到这些符号是什么。出于调试/开发目的,保留私有标头,它们在开发和调试阶段派上用场。

于 2013-09-20T06:41:47.753 回答