转自:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32
Some classes of the Foundation and AppKit frameworks create singleton objects. In a strict implementation, a singleton is the sole allowable instance of a class in the current process. But you can also have a more flexible singleton implementation in which
a factory method always returns the same instance, but you can allocate and initialize additional instances.TheNSFileManager
class
fits this latter pattern, whereas theUIApplication
fits the former. When you ask for an instance ofUIApplication
,
it passes you a reference to the sole instance, allocating and initializing it if it doesn’t yet exist.
A singleton object acts as a kind of control center, directing or coordinating the services of the class. Your class should generate a singleton instance rather than multiple instances when there is conceptually only one instance (as with, for example,NSWorkspace
).
You use singleton instances rather than factory methods or functions when it is conceivable that there might be multiple instances someday.
To create a singleton as the sole allowable instance of a class in the current process, you need to have an implementation similar toListing
2-15. This code does the following:
-
It declares a static instance of your singleton object and initializes it tonil
.
-
In your class factory method for the class (named something like “sharedInstance” or “sharedManager”), it generates an instance of the class but only if the static instance isnil
.
-
It overrides theallocWithZone:
method to ensure that another instance is not allocated if someone tries to allocate and initialize an instance of your class directly instead
of using the class factory method. Instead, it just returns the shared object.
-
It implements the base protocol methodscopyWithZone:
,release
,retain
,retainCount
,
andautorelease
to do the appropriate things to ensure singleton status. (The last four of these methods apply to memory-managed code, not to garbage-collected code.)
Listing 2-15Strict implementation of a singleton
static MyGizmoClass *sharedGizmoManager = nil;
|
|
+ (MyGizmoClass*)sharedManager
|
{
|
if (sharedGizmoManager == nil) {
|
sharedGizmoManager = [[super allocWithZone:NULL] init];
|
}
|
return sharedGizmoManager;
|
}
|
|
+ (id)allocWithZone:(NSZone *)zone
|
{
|
return [[self sharedManager] retain];
|
}
|
|
- (id)copyWithZone:(NSZone *)zone
|
{
|
return self;
|
}
|
|
- (id)retain
|
{
|
return self;
|
}
|
|
- (NSUInteger)retainCount
|
{
|
return NSUIntegerMax; //denotes an object that cannot be released
|
}
|
|
- (void)release
|
{
|
//do nothing
|
}
|
|
- (id)autorelease
|
{
|
return self;
|
}
|
If you want a singleton instance (created and controlled by the class factory method) but also have the ability to create other instances as needed through allocation and initialization, do not overrideallocWithZone:
and
the other methods following it as shown inListing
2-15.
分享到:
相关推荐
Creating a Singleton Instance 104 Chapter 3 Adding Behavior to a Cocoa Program Starting Up 107 What Happens in the main Function 107 Using a Cocoa Framework 109 Kinds of Framework Classes 109 Cocoa ...
设计模式里面的单例模式程序 ... public class Singleton { ... //private static Singleton instance = new Singleton(); //pulbic static Singleton getInstance(){ // return instance; //} }
单例模式的特点有三: ...除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。
Android Singleton单例模式运用详解
C++完美实现Singleton模式
简单的单例模式举例Singleton 分为恶汉式 懒汉式
1、没有构造函数(DEFINE_SINGLETON_DEFAULT); 2、有构造函数,构造函数没有参数(DEFINE_SINGLETON_CONSTRUCT_NO_PARAM); 3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_CONSTRUCT_WITH_DEFAULT)...
private static Singleton instance=new Singleton(); private Singleton(){} static Singleton getInstance() { return instance; } } 懒汉式 class Singleton { private static Singleton instance=null; ...
单例模式 Singleton 单例模式线程安全问题和拓展
private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance() { return instance; } }
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
Singleton pattern单例模式应用
单例模式,Singleton两种代码实现。一般实现方法,泛型实现方法(推荐)
Laravel开发-singleton-pattern 帮助程序包来实现单例类。
singleton是最常见的设计模式,但是要设计好却是不容易,尤其是多线程的时候,需要考虑线程安全的问题.
用VC实现的singleton 模式 在VS03,VC6.0下编译通过
java singleton 不解释不解释不解释不解释
singleton pattern 的定义 主要应用方法 优缺点 通过代码 具体分析解释
SingleTon{ private static SingleTon INSTANCE = null; private SingleTon(){} public static SingleTon getInstance() { if(INSTANCE == null){ INSTANCE = new SingleTon(); } return INSTANCE; } } //懒汉模式...