码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 设计模式之单例

时间:2014-06-12 06:58:27      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:style   使用   数据   os      line   

 

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

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

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

 

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

 

 

iOS 设计模式之单例,布布扣,bubuko.com

iOS 设计模式之单例

标签:style   使用   数据   os      line   

原文地址:http://www.cnblogs.com/iOS527887318/p/3782724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!