objective-c - 从公共(public) header 引用私有(private) header

标签 objective-c xcode frameworks

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

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

Headers visibility

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

最佳答案

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

也就是说,您不应该私下包含像 AFNetworking 这样的公共(public)库。可能有其他框架需要它(包括主程序)。如果您私下包含它,那么将会发生冲突,最终开发人员将很难解决这些冲突。您需要让您的用户知道他们需要将 AFNetworking 与您的软件包一起包含在内。您无法在不给用户带来很多麻烦的情况下轻易隐藏此实现细节。

关于objective-c - 从公共(public) header 引用私有(private) header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17754043/

相关文章:

ios - 使用 XCTest 测试自动布局

iOS 删除键没有反应

iphone - 在iOS中,实现滑动 "drawers"的最佳方式是什么

performance - 与 Entity Framework 平行。与启动多个可执行文件相比,性能是惊人的,为什么呢?

tdd - 是否有任何示例,资源或什至由Asp.net MVP + SandcaSTLe + TDD/Nunit + Fitnesse组成的框架?

iphone - bundle 标识符 yourcompany 格式

ios - 获取星期几

swift - 将 header 添加到 TableViewController 中的范围标题(Swift - Xcode)

objective-c - 更改 plist 中的值 - 不更改值

java - 我的Java项目应使用什么框架/技术堆栈?