Cocoa单例约定

3
Cocoa中充满了单例模式。 Cocoa API何时使用单例模式,是否有逻辑上/传统上的区别?
NSSingletonObject *so = [NSSingletonObject defaultSingleton];

对比

NSSingletonObject *so = [NSSingletonObject sharedSingleton];

不是很重要的事情,但我真的不明白为什么有时候会使用其中一个而不是另一个。


你在考虑哪些类? - hooleyhoop
1个回答

7
我认为,如果使用的是真正的单例模式(例如NSApplication),则应遵循-[JKFoo sharedFoo]约定。另一方面,如果类提供对默认实例的访问,但仍然可以创建其他实例(例如NSNotificationQueueNSFileManager),则使用-[JKBar defaultBar]约定。
附注:如果您正在实现自己的几个Cocoa单例模式,则可以查看有用的开源头文件 :)
[编辑:Mike Ash在他的博客上指出了更好的使用GCD的单例模式解决方案]

1
关于实现自己的单例模式,网上有很多关于在Cocoa中实现“真正”的单例的解决方案,但大部分情况下,Objective-C不是通过规定来处理事情而是通过约定。除非您的代码将由许多外部开发人员使用,否则不要浪费时间编写防弹单例模式。如果您将一个类标记为单例,则Objective-C风格通常认为这已经足够了……如果您将其作为非单例使用,则这是您的问题。 - Barry Wark
NSApplication不是单例模式。NSNotificationCenter和NSFileManager也不是。我不确定在Cocoa中是否存在单例模式。 - hooleyhoop
@mustlSignUp: 好吧,如果你要挑剔的话,你是对的,但我认为大多数人会像苹果一样将这些类称为单例 - http://gemma.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html#//apple_ref/doc/uid/TP40002974-CH6-SW66。 - jkp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接