线程安全的单例
什么是单例?
在软件工程学中,单例模式是一种设计模式用于实现数学上的单元素集合的概念,它是通过将一个类的实例限定到唯一的一个对象来实现的。
单例模式是指系统中对某个类只能有一个对象,不会出现第二个对象.
实现单例模式的三个必要条件:
- 类的构造方法是私有的
重写allocWithZone 方法, 让初始化操作只执行一次 - 类中提供一个类方法用于产生对象
直接定义一个类方法 - 类中有一个私有的自己对象
.m 中定义一个属性
Grand Central Dispatch (GCD) (在 Mac OS 10.6 和 iOS 4.0 之后)非常适合用于实现单例设计模式。
+ (ViewController *)shareInstance
{
// 不允许外部访问, 同时存放在静态区中.
static ViewController *instance = nil;
// 只会被调用一次, 让他只能初始化一次
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
instance = [[self alloc] init];
});
return instance;
}
当你需要访问这个实例时
ViewController *vc = [ViewController shareInstance];
优点:
- 安全
- 兼容 ARC
- 代码量少
缺点: 同时允许创建非共享的实例
ViewController *vc = [[ViewController alloc] init];