美文网首页编写高质量代码的52个有效方法
52个有效方法(15) - 使用前缀避免命名空间冲突

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

作者: SkyMing一C | 来源:发表于2018-09-03 17:34 被阅读4次

    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宣称其保留使用所有“两字母前缀”的权利,所以你自己选用的前缀应该是三个字母或以上的。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/khhlbftx.html