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

Nes*_*esk 2 xcode frameworks objective-c

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

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

标题可见性

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

Rob*_*ier 5

公共标头不得导入私有标头.您的公共标头中应该没有任何内容依赖于私有数据结构.如果调用者必须知道私有数据结构,那么它不是私有的.如果调用者不需要知道私有数据结构,则没有理由将其包含在公共头中.你必须给你特别的标题更多的细节(什么部分AFHTTPClientJPImgrClient?)

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

  • 在许多情况下,has-a(组合)比 is-a(继承)更正确。继承可能对您来说很有效(这很好),但不要假设组合不正确或过于复杂。它通常是构建事物的首选方式,尤其是在 Cocoa 中。 (2认同)