http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32
Some
classes of Foundation and the Application Kit 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.The NSFileManager
class fits this latter pattern,
whereas the UIApplication
fits the former. When you ask
for an instance of UIApplication
, 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 one day.
To
create a singleton as the sole allowable instance of a class in the
current process, you need to have an implementation similar to Listing 2-15
. This code does the following:
-
Declare a static instance of your
singleton object and initialize it to nil
.
-
In your class factory method for the class (named
something like “sharedInstance” or “sharedManager”), generate an
instance of the class but only if the static instance is nil
.
-
Override the allocWithZone:
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, just return the shared object.
-
Implement the base protocol methods copyWithZone:
,
release
, retain
, retainCount
,
and autorelease
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-15
Strict 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 override allocWithZone:
and the other methods following it as shown in Listing
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单例模式运用详解
static Singleton instance = null; Singleton() { } public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } } } ``` 这种方式...
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 的定义 主要应用方法 优缺点 通过代码 具体分析解释