引用公共标头中的私有标头

时间:2013-07-19 19:29:34

标签: objective-c xcode frameworks

我正在编写一个用Objective-C编写的框架,而我在尝试将框架目标链接到另一个项目后遇到了一个问题。当我编译最后一个项目时,Xcode显示错误'AFHTTPClient.h' file not found

我的项目是以这种方式构建的:我自己编写的标题是公开的,我使用的库中的标题是项目可见性,因此开发人员不会被不必要的文件污染。

Headers visibility

JPImgurKit.h文件导入导入JPImgurClient.h文件的文件AFHTTPClient.h(以及其他文件)并失败...当我把这最后一个文件放在公共部分时工作(直到导入另一个私人文件),但我想避免这种情况,是否可能?

1 个答案:

答案 0 :(得分:5)

公共标头不得导入私有标头。您的公共标头中应该没有任何内容依赖于私有数据结构。如果调用者必须知道私有数据结构,那么它不是私有的。如果调用者不需要知道私有数据结构,则没有理由将其包含在公共头中。您必须提供有关特定标题的更多详细信息(AFHTTPClientJPImgrClient的哪些部分?)

那就是说,你不应该私下包括像AFNetworking这样的公共库。可能还有其他需要它的框架(包括主程序)。如果您私下包含它,那么将会发生冲突,这对最终开发人员来说非常具有挑战性。您需要让用户知道他们需要将AFNetworking与您的包一起包含在内。您不能轻易隐藏此实现细节,而不会让您的用户感到很麻烦。