Objective-C的命名空间约定

时间:2009-11-19 07:40:50

标签: objective-c class namespaces

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

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能够做到吗?

3 个答案:

答案 0 :(得分:7)

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

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

顺便说一下,我认为如果支持名称空间,它们会以类似cpp的方式解决(比如MyNamespace :: MyClass,而不是MyNamespace.MyClass)

答案 1 :(得分:4)

据我所知,你在Objective-C(或C)中要做的就是命名化类名。

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

答案 2 :(得分:2)

虽然Objective-C可能能够做到这一点,但是如果你使Root具有预先声明或动态构建的属性,我真的建议不要这样做。

这违反了Objective-C的标准。没有必要使用这种方法。

每种语言都以某种方式构建,应该相应地使用。以上不是如何使用Objective-c。

为什么要以这种方式使用它?

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