首页 > 代码库 > iOS 设计模式之单例

iOS 设计模式之单例

 

      单例无非就是只有一个实例,它确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。它经常用来做应用程序级别的共享资源控制。这个模式使用频率非常高,通过一个单例类,可以实现在不同窗口之间传递数据。

     单例模式是所有模式中最简单的一种设计模式,这一模式的意图是使得一个对象成为系统中的唯一实例。

     说到单例模式,先说下他的优缺点吧:优点就是可以让程序其他的类去用它,简单,可以实现不欧诺个窗口之间的数据传递;当然有优点,肯定有缺点,缺点就是,在单例中不释放内存,所以一般一个程序最多只能有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;
}

 

如果单例对象实由多个线程访问,那么就要保证他的线程安全。