【发布时间】:2012-03-01 16:04:35
【问题描述】:
我读过 Objective-C 的性质很容易导致名称冲突,因此在代码中添加前缀是最佳实践。
如果您的MyAwesomeApp iOS 应用程序使用两个外部库FooLibrary 和BarLibrary 导致名称冲突,您如何解决此问题,因为在内部FooLibrary 也碰巧使用BarLibrary?
起初可能会建议删除对BarLibrary 的任何一个引用,但你不能这样做,因为虽然两者都是BarLibrary,但它们实际上是它的两个不同版本,所以FooLibrary 取决于在BarLibrary(v1) 实现上,而您的MyAwesomeApp 取决于BarLibrary(v2) 实现。
此时我意识到同一个库的两个不同版本实际上是两个不同的东西,所以它们不应该首先共存于同一个项目中。
除了重构(通过重命名)其他人的代码之外,还有其他方法可以解决这个难题吗?
【问题讨论】:
-
你能改用
v1ofBarLibrary吗? -
我认为唯一好的解决方案是让FooLibrary的作者更新到BarLibrary的v2。由于 Apple 不支持 iOS 上的共享库,这只是我们必须忍受的限制之一。
-
@Mike 的意思是你不能那样做?
-
@exalted,除非您有办法编辑二进制文件以在编译后更改符号名称。也许某种混淆工具可以做到这一点。或者,您可以使用十六进制编辑器,在 BarLibrary v1 及其在 FooLibrary 中的调用者中搜索和替换有问题的符号,并使用一些备用名称。如果你这样做,一定要好好测试它。 ;-)
-
@exalted,你有 FooLibrary 和 BarLibrary v1 的源代码吗?你也可以
#define函数名在它们的头文件中添加其他内容...
标签: objective-c ios xcode namespaces compiler-errors