单例模式顾名思义就是只有一个实例,这种设计模式确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例.它经常用来做应用程序级别的共享资源控制.通过一个单例,可以实现在不同窗口之间传递数据.
创建单例的写法有很多种,目前我只接触到其中的两种,下面以一个Person类为例,简要介绍一下单例的创建
创建单例的方法一般以shared, standard, default, main ,加上类名作为方法名,因为该类只有一个实例对象,所以创建是 + 号方法,并且返回值类型即为该类.
第一种方法:
(1)初始化一个静态(static)实例,置为nil
(2)@synchronized 是一个同步锁,保证同一时刻只有一个线程访问,保证安全性
(3) !person 相当于 person == nil 即判断person是否为空,根据判断做下一步操作
(4)为person开辟空间,初始化,然后返回该对象
+ (Person *)sharedPerson
{
static Person *person = nil;</span><span style="font-size:18px;">
@synchronized(self){
if (!person) {
person = [[Person alloc] init];
}
}
return person;
}</span>
第二种方法
(1)初始化一个静态实例,置为nil
(2)通过C语言中的函数 dispatch_once - GCD: Dispatch Once , 在Block中开辟空间,初始化.该方法可以保证Block中的方法
只执行一次,从而达到只创建一个对象的目的
+ (Person *)sharedPen
{
static Pen *pen = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
pen = [[Pen alloc] init];
});
return pen;
}