Objective-C Singleton实例作为静态?

时间:2009-02-06 16:51:58

标签: c objective-c design-patterns singleton

在Apple关于Singleton示例的文档中,我确实知道有一种方法可以为一只猫设置皮肤 - 但为什么他们还要确保将实例注册为静态?

取自:http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_10.html

我指的是:

静态MyGizmoClass * sharedGizmoManager = nil;

2 个答案:

答案 0 :(得分:9)

我认为无法从定义它的文件外部访问变量。否则它将是全球可访问的。

这强制客户端必须使用 - (id)sharedObject来访问单例。

答案 1 :(得分:2)

上面的答案是正确的。将单例变量声明为静态意味着它只存在于包含它的文件的本地范围内,这正是您想要的。部分原因是因为这个单例模型在第一次使用时依赖于延迟加载来创建单例,而部分原因是你不希望外部访问指针可能会丢失内存中的单例,或者允许另一个实例被创造,从而使整个事情一开始就毫无意义。