单例模式:是指一个类如果设置为单例模式,那么这个类只能创建一个对象。而单例模式多数用于初始化时使用。单例的两大特性:1、可以保证对象的唯一性。2、可以保证线程的安全性。
下面创建一个单例模式的例子:
+(instancetype)shareInstance
{
static SFDataBaseEngine *dbEngine = nil;
static dispatch_once_t onceTocken;
dispatch_once(&onceTocken, ^{
dbEngine = [[self alloc]init];
});
return dbEngine;
}
需要注意的是:这个方法必须是一个静态方法(也就是类方法)。
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单例对象。