52个有效方法(15) - 使用前缀避免命名空间冲突

Objective-C没有其他语言那种内置的命名空间(namespace)机制。

鉴于此,我们在起名时要设法避免潜在的命名冲突,否则很容易就重名了。

如果发生命名冲突(naming clash),那么应用程序的链接过程就会出错,因为其中出现了重复符号:

duplicate symbol _OBJC_METACLASS_$_EOCTheClass in:
      build/something.o
      build/something_else.o
duplicate symbol _OBJC_CLASS_$_EOCTheClass in:
      build/something.o
      build/something_else.o

错误原因在于:

  • 应用程序中的两份代理都各自实现了名为EOCTheClass的类,这导致EOCTheClass所对应的类符号和元类符号个定义了两次。

解决方法就是:

  • 倘若可以修改类名是最好不过的了。

  • 倘若是使用了静态库,则编译静态库时,则需要在Build Phases -> Compile Sources 中去掉改类的.m文件,不将其编译进静态库。

要点
  1. 选择与你的公司、应用程序或二者皆有关联之名称作类名的前缀,并在所有代码中均使用这一前缀。

  2. 若自己所开发的程序库中用到了第三方库,则应为其中的名称加上前缀。

  3. 给C实现函数添加前缀(因为C函数名会作为顶级符号,出现在符号表中)。

  4. 需要注意的是:Apple宣称其保留使用所有“两字母前缀”的权利,所以你自己选用的前缀应该是三个字母或以上的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容