> 单例设置模式就是只有一个实例. 单例模式确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例. 这个类称为单例类
1. 单例模式的要点:
显然单例模式的要点有三个: 某个类只能有一个实例, 它必须自行创建这个实例, 它必须自行向整个系统提供这个实例
2. 单例模式优点:
1) 实例控制: 单例模式会阻止其他对象实例化自己的单例对象的副本, 从而确保所有对象都访问唯一实例
2) 灵活性: 因为类控制了实例化过程, 所以类可以更加灵活修改实例化过程
3. iOS 中单例模式
在 objective - c 中要实现一个单例类, 至少需要做以下四个步骤:
1) 为单例对象实现一个静态实例, 并初始化, 然后设置成 nil
2) 实现一个实例构造方法检查上面声明的静态实例是否为 nil , 如果是则新建返回一个本类的实例
3) 重写 allocWithZone 方法, 用来保证其他人直接使用 alloc 和 init 试图获得一个新实例的时候产生一个新实例
4) 适当实现 allocWithZone , copyWithZone , release 和 autorelease 方法
代码演示:
不考虑线程安全
/// 不考虑线程安全
+ (instancetype)sharedInstance {
static CNPerson *instance = nil;
if (instance == nil) {
instance = [[self alloc] init];
}
return instance;
}
考虑线程安全
/// 线程安全的
+ (instancetype)sharedInstance {
static CNPerson *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}