我读到 Objective–C 很容易导致名称冲突,因为它的本性,所以给代码加上前缀是最佳实践。
如果您的 MyAwesomeApp
iOS 应用程序使用两个外部库 FooLibrary
和 BarLibrary
导致名称冲突,您如何解决这个问题,因为在内部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/