如何解决objective-c中的命名空间冲突?

时间:2012-10-14 06:35:15

标签: iphone objective-c

  

可能重复:
  What is the best way to solve an Objective-C namespace collision?

我为iphone开发了第三方动态库,取决于Mobile Substrate。 问题是如果某个APP有一个名为“Class1”的Obj-C类,而我的dylib也有一个名为“Class1”的类,则无法保证在运行时使用哪个类。 是否有任何解决方案可以保持类名“Class1”并解决命名空间问题?

1 个答案:

答案 0 :(得分:2)

在Objective-C中,命名空间的概念不存在,源文件只是一个接一个地导入,如果将通用名称用作类名,这当然会导致名称冲突。

在Objective-C中解决碰撞问题的一个好方法是采用前缀来区分你的类名和其他类名,这是Apple本身已经使用的技术,让我们考虑一下数组类,它叫做NSArray ,为什么?

背后有一个具体原因:

  • N :识别下一步
  • S :识别步骤
  • 数组:标识数据结构的名称

NextStep 是创建Foundation框架的公司的名称,以及Apple在90年代中期收购的公司。

我的例如我在我的类中使用了不同的前缀,我使用: AleArray 我名字的前3个字符后跟数据结构的名称,你可以选择你自己的前缀并继续...

当然,使用简单前缀的冲突概率仍高于使用命名空间(通常使用反向域名表示法),但在大多数情况下可能就足够了。