今天和大家分享一下ios中常用的单例模式。
首先解释一下什么叫做单例,顾名思义,单例就是在程序中只有这么一个实例对象,专业点就是说对象只初始化一次。
单例模式主要有两种:
第一种,
+ (id)sharedInstance
{
static ViewController *instance = nil;
@synchronized(self)
{
if (!instance) {
instance = [[ViewController alloc] init];
}
}
return instance;
}
使用这个方法创建单例主要注意一下,@synchronized()关键字,其作用是多线程保护。也就是说在多线程的情况下,如果同时调用这个单例方法并且这个实例是第一次初始化,那么就会导致创建出两个实例,而加上@synchronized()关键字恰好可以避免这种情况。
第二种,
+ (id)sharedInstance
{
static ViewController *instance = nil;
static dispatch_once_t once;
dispatch_once(&once,^{
instance = [[ViewController alloc]init];
});
return instance;
}
使用这种方式创建单例,是在GCD机制出现之后。void dispatch_once(dispatch_once_t*predicate,dispatch_block_tblock );
解释:Executes a block object once and only once for the lifetime of an application.意思是说在应用程序的整个生命周期期间,代码块里面的代码只执行一次。