【问题标题】:Namespace convention for Objective-CObjective-C 的命名空间约定
【发布时间】:2009-11-19 07:40:49
【问题描述】:

我想对类进行分组,因此必须像这样引用它们:

Root.Web
Root.Mail
Root.Audio

以上每个类都对应一个文件:

Web.h
Mail.h
Audio.h

我们的目标是使用上面的“Root”语法,而不仅仅是:

Audio myAudio = [[Audio alloc] init];

相反,它应该是这样的:

Root.Audio myAudio = [[Root.Audio alloc] init];

Objective-C 有能力做到这一点吗?

【问题讨论】:

    标签: objective-c class namespaces


    【解决方案1】:

    Objective-c 不支持命名空间(因为 c 不支持)所以你不能这样做。为避免潜在的冲突,您可以将特定前缀添加到类名

    Herehere 是类似的问题,您可能会发现它们很有用。

    顺便说一句,我认为如果支持命名空间,它们会以类似 cpp 的方式得到更多处理(如 MyNamespace::MyClass,而不是 MyNamespace.MyClass)

    【讨论】:

      【解决方案2】:

      据我所知,您在 Objective-C(或 C)中为实现这一目标所做的就是将类名命名为命名空间。

      RootAudio *myAudio = [[RootAudio alloc] init];
      

      【讨论】:

      • 谢谢。我想这是后面帖子中提到的前缀命名约定。
      • 没错,如果您查看 Cocoa 中的内置类,它们使用例如 NS (NextStep)、CA (CoreAnimation) 等。
      【解决方案3】:

      虽然 Objective-C 可能能够做到这一点,但如果您将 Root 设为具有预先声明或动态构建的属性的单例,我强烈建议您不要这样做。

      它违背了 Objective-C 的标准。应该没有必要使用这种方法。

      每一种语言都是以某种方式构造的,应该相应地使用。以上不是objective-c的使用方式。

      为什么要这样使用它?

      如果是这样每个对象都可以访问 Root.Audio 以播放文件,那么为什么不让 Audio 成为单例,或者在 Audio 上拥有一个可以存储和检索您声明的实例的类方法呢?运行时中的每个对象都可以访问类方法..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2015-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多