单例无非就是只有一个实例,它确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。它经常用来做应用程序级别的共享资源控制。这个模式使用频率非常高,通过一个单例类,可以实现在不同窗口之间传递数据。
单例模式是所有模式中最简单的一种设计模式,这一模式的意图是使得一个对象成为系统中的唯一实例。
说到单例模式,先说下他的优缺点吧:优点就是可以让程序其他的类去用它,简单,可以实现不欧诺个窗口之间的数据传递;当然有优点,肯定有缺点,缺点就是,在单例中不释放内存,所以一般一个程序最多只能有4个单例,再多的话,会导致系统奔溃。
想要在一个oc中实现一个单例类,必须实现4个步骤
(1):为单例对象,实现一个静态实例,并且初始化,设为nil,一定是加号,类方法;
(2):实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例
(3):重写initWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实例的时候不产生一个新实例,
(4):适当实现allocWitheZone,copyWithZone,release和autorelease
例子:为RootViewController创建一个单例函数:
static
RootViewController *shareRootViewController =
nil;
+(RootViewController
*)sharedController{
@synchronized(self){
if(shareRootViewController
==
nil){
shareRootViewController
= [[[self alloc] init]
autorelease];
}
}
return
shareRootViewController;
}
+(id)allocWithZone:(NSZone
*)zone{
@synchronized(self){
if
(shareRootViewController == nil)
{
shareRootViewController
= [super
allocWithZone:zone];
return shareRootViewController;
}
}
return
nil;
}
如果单例对象实由多个线程访问,那么就要保证他的线程安全。