2009-02-06 90 views
2

在苹果公司的单例文档中,我明白有不止一种方法来剥皮猫 - 但为什么他们打扰确保实例注册为静态?作为静态的Objective-C Singleton实例?

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

我指的是:

静态MyGizmoClass * sharedGizmoManager =零;

+0

上面的链接应该更新为:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html – 2010-01-03 04:45:53

回答

9

我相信它是这样的,变量不能从它定义的文件之外访问。否则它将是全球可访问的。

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

+0

我在多个文件中以类似的方式使用单例/ modules ..它不会给我任何访问它的问题。 – Coocoo4Cocoa 2009-02-06 17:00:35

2

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