单例设计模式

来源:互联网 发布:淘宝排名前十的店铺 编辑:程序博客网 时间:2024/06/05 22:36

单例模式:是指一个类如果设置为单例模式,那么这个类只能创建一个对象。而单例模式多数用于初始化时使用。单例的两大特性:1、可以保证对象的唯一性。2、可以保证线程的安全性。

下面创建一个单例模式的例子:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. +(instancetype)shareInstance  
  2. {  
  3.     static SFDataBaseEngine *dbEngine = nil;  
  4.     static dispatch_once_t onceTocken;  
  5.     dispatch_once(&onceTocken, ^{  
  6.         dbEngine = [[self alloc]init];  
  7.     });  
  8.     return dbEngine;  
  9. }  
需要注意的是:这个方法必须是一个静态方法(也就是类方法)。

1.第一行:是创建一个静态的空对象;第二行:定义一个“令牌”;当第三行执行的时候,如果这个令牌为空,则执行block块里面的代码,如果该令牌不为空,则直接跳转到下面的return语句。从而保证该类只创建一个对象。

2.这里需要注意的一点是:第一行和第二行必须保证是一个静态变量或者是全局变量,否则就会创建多个对象,也就不能保证该类的对象唯一性。那么也就不能够称之为单例了。

3.因为单例都是静态方法,所以只能够用类来调用。


使用单例的情况:a.当需要存储一个全局的属性,并且这个属性是在一个类创建的时候调用的。

     b.当一个类创建对象时需要占用很大的内存,这时就需要创建一个单例对象,因为否则的话每一次就创建一个新的对象,而这个对象又占用很大的内存。


4.iOS最经典的一个单例模式是UIApplication的单例模式。

static UIApplication * application = nil;

+(UIApplication*) shareApplication{

    if(application == nil){

         application= [[UIApplication alloc]init];

    }

    return application;

}

返回UIApplication的一个单例,单例是全局的;

UIApplication 代表的是应用程序做的事,每个程序只能有一个,系统使用的是单例模式,就是上面的[UIApplication sharedApplication]来得到一个实例。

在应用中,UIApplication *application = [UIApplication sharedApplication];就是实例化一个application对象。其中[UIApplication sharedApplication]就是实例化一个UIApplication单例对象。


0 0