Singleton访问者名称背后的原因是什么?

时间:2011-02-16 21:42:47

标签: objective-c naming-conventions singleton

在一些项目的过程中,我编写了大量的类工厂方法来访问类的Singleton实例。我总是在+ (id)sharedSomething;命名约定上使用了一些变体。

另一方面,Apple有各种命名惯例。例如:

// NSNotificationCenter
+ (id)defaultCenter;

// NSUserDefaults
+ (NSUserDefaults *)standardUserDefaults;

// UIApplication
+ (UIApplication *)sharedApplication;

在命名我自己的方法时,我应该注意的名词中是否有任何押韵或理由放在名词之前?我原本以为它可能与“灵活”与“严格”单例设计有关,但NSFileManager和NSNotificationCenter都遵循+(id)defaultSomething约定,但NSFileManager支持其他实例的分配,而NSNotificationCenter则不支持。我很难过。

编辑:我认为NSNotificationCenter不支持新中心的实例化是错误的。它并不是非常普遍,所以最初的假设不一定是无效的。

3 个答案:

答案 0 :(得分:5)

通常,shared…方法适用于真正的单例(NSApplication,NSWorkspace等),而default…standard…表示可以有效实例化的类,但大多数客户端只需使用一个全局实例就会很开心。但是没有任何公开的书面标准,而且似乎主要是在撰写这样的课程时做出的决定。

答案 1 :(得分:2)

我发现,完全偶然发现,Craig Hockenberry出版的“ iPhone App Development ”一书中的这个主题:

  

不幸的是,没有一个标准   用于命名单身人士。老班,   比如那些在基础上,使用   方法上的默认前缀   名称。较新的课程倾向于使用   分享作为前缀。

我会引用它作为@Chuck发布的答案的替代方案。总结似乎没有真正的模式,而查克指出真正的单身人士和通常用作单身人士的物体之间的粗略关联,而霍肯伯里先生指出了年龄的粗略相关性。

答案 2 :(得分:1)

它与“灵活”与“严格”的单身设计无关。 NSNotificationCenter和NSUserDefaults甚至不是单身人士。你真的认为flexibleSingleNotificationCenter是一个比defaultCenter更好的名字吗?有没有一种方法可以帮助方法的用户知道它是如何实现的?

NSDeteriministicFiniteStateMachineToggleButton是谁?