Objective-C——同一个库的不同版本导致名称冲突

标签 objective-c ios xcode namespaces compiler-errors

我读到 Objective–C 很容易导致名称冲突,因为它的本性,所以给代码加上前缀是最佳实践。

如果您的 MyAwesomeApp iOS 应用程序使用两个外部库 FooLibraryBarLibrary 导致名称冲突,您如何解决这个问题,因为在内部FooLibrary 也恰好使用 BarLibrary 吗?

一开始有人可能会建议删除对 BarLibrary 的任何一个引用,但你不能那样做,因为虽然两者都是 BarLibrary,但它们实际上是两个它的不同版本,所以 FooLibrary 依赖于 BarLibrary(v1) 实现,而你的 MyAwesomeApp 依赖于 BarLibrary(v2) 实现。

在这一点上,我意识到同一个库的两个不同版本实际上是两个不同的东西,因此它们首先不应该共存于同一个项目中。

除了重构(通过重命名)其他人的代码之外,还有其他方法可以解决这个难题吗?

最佳答案

如果其他图书馆正在使用可能共享的图书馆,例如一个 JSON 库,他们正在编译一个库供您包含,那么他们真的应该在库上加上自己的前缀。

例如,我曾在 Urban Airship 中看到过这种做法。他们使用 JSONKit(或一些 JSON 库),但他们在所有 JSONKit 用法前加上 UA——这样当我使用不同版本的 JSONKit 时,它们可以一起编译和运行。

我也看到它用 Reachability 完成了……每个人似乎都有自己的版本……

关于Objective-C——同一个库的不同版本导致名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519584/

相关文章:

android - React Native 同步安全随机数生成

ios - iphone 4s 中的 AvCapture Session 全屏

swift - 将附件 View 添加到“打开/保存”对话框时布局约束错误

ios - 有没有办法检测屏幕键盘上的触摸?

objective-c - iOS - 2d 图像变成 3d

ios - 在最新的 xcode 5 中分别添加到 Storyboard 中的 UIViewController 后看不到 UIView

mysql - 如何将 sqlite 中每个 session 的所有新值插入到同一行(适用于 iOS)

ios - [[NSRunLoop currentRunLoop] runMode :* beforeDate:*]; 中的 BAD EXC

ios - 当点击单元格中的 UIImageView 时如何获取indexpath.row?

objective-c - 在 objective-c 中的两个 View Controller 之间共享对象