【发布时间】:2012-05-22 00:46:21
【问题描述】:
在 Xcode 的“Copy Headers”阶段,“Project”部分和“Private”部分下的 headers 有什么区别?您想什么时候使用它们?
另外,我可以理解您为什么要复制公共标头(例如对于静态库) - 但您为什么要复制私有标头?
编辑: @mipadi 下面解释了公共和私有部分的作用。但是,我仍然缺少在“项目”部分中包含标题与在“复制标题”阶段的任何部分中没有标题之间的区别。
【问题讨论】:
在 Xcode 的“Copy Headers”阶段,“Project”部分和“Private”部分下的 headers 有什么区别?您想什么时候使用它们?
另外,我可以理解您为什么要复制公共标头(例如对于静态库) - 但您为什么要复制私有标头?
编辑: @mipadi 下面解释了公共和私有部分的作用。但是,我仍然缺少在“项目”部分中包含标题与在“复制标题”阶段的任何部分中没有标题之间的区别。
【问题讨论】:
如果公共标头包含私有标头,则必须复制私有标头,但要确保库或框架的使用者知道这些私有标头不是公共 API 的一部分。
“项目”标头是私有标头,不包含在公共标头中(它们通常是内部实现的一部分,因此仅包含在实现中 - .c 或 @987654322 @ -- 文件)。
构建框架时,公共头文件被复制到框架的Headers目录中,而私有头文件被复制到PrivateHeaders目录中。
【讨论】:
@Danra,如果您将标头放在“项目”下,这些标头将对您的实现可见,无论标头的实际位置如何。
假设您的文件夹结构如下: /Sources/libAF/AFSomething.h /Sources/libAF/AFSomething.m /Sources/exec/main.m
如果您将“AFSomething.h”放在“项目”下,则可以在 main.m 中使用它,如下所示: #import "AFSomething.h"
通俗地说,Xcode 将包含项目标头,尽管您省略了实际路径信息。
【讨论】:
来自Setting the Visibility of a Header File:
Public:界面已完成,供您产品的客户使用。公共标头包含在产品中,作为无限制的可读源代码。
Private:该界面不适用于您的客户,或者处于开发的早期阶段。产品中包含一个私有标头,但它被标记为“私有”。因此,这些符号对所有客户端都是可见的,但客户端应该明白他们不应该使用它们。
项目:该接口仅供当前项目中的实现文件使用。项目标头不包括在目标中,除了在目标代码中。客户根本看不到这些符号,只有您才能看到。
【讨论】:
除此之外,通常人们有一个脚本来“清理”私有标题,这样公众就无法看到这些符号是什么。出于调试/开发目的,保留私有标头,它们在开发和调试阶段会派上用场。
【讨论】: