与C一样,目标C也没有名称空间。这意味着,如果某人已经定义了一个函数foo
或一个类Bar
,则它必须是全局唯一的,并且您不能定义它。当您拥有代码然后添加另一个库时,这可能会导致很多麻烦。
还有就是在苹果公司为此提出了指导原则与目标C编程:约定的iOS开发者库的部分:
在整个应用中,某些名称必须唯一
每次创建新的类型,符号或标识符时,都应首先考虑该名称必须唯一的范围。有时,这个范围可能是整个应用程序,包括其链接的框架;有时范围仅限于封闭的类,甚至只是一段代码。
类名在整个应用程序中必须唯一
必须不仅在您在项目中编写的代码内而且在所有可能包含的框架或捆绑软件中,都对Objective-C类进行唯一命名。例如,应避免使用通用类名,例如ViewController或TextParser,因为包含在应用程序中的框架可能无法遵循约定并创建具有相同名称的类。
为了使类名唯一,惯例是在所有类上使用前缀。您会注意到,Cocoa和Cocoa Touch类名称通常以NS或UI开头。Apple保留了此类的两个字母的前缀,供在框架类中使用。当您了解有关Cocoa和Cocoa Touch的更多信息时,会遇到与特定框架相关的各种其他前缀:
...
您自己的类应使用三个字母前缀。这些可能与公司名称和应用名称的组合有关,甚至可能与应用中的特定组件有关。例如,如果您的公司名为Whispering Oak,并且您正在开发一款名为Zebra Surprise的游戏,则可以选择WZS或WOZ作为类前缀。
因此,您提到的这些库打破了这种约定,但成为了Objective C中缺少命名空间的问题的核心。
NSHipster的进一步阅读Namespacing
解决Objective-C名称空间冲突的最佳方法是什么?
如何在iOS Objective-C代码中使用命名空间?
;-)