- 单例模式 是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在iOS开发中,单例模式是非常有用的一种设计模式。可以保证在程序运行过程,一个类只有一个实例
- 实现单例模式的条件 实现单例模式有三个条件:
1 类的构造方法是私有的
2 类提供一个类方法用于产生对象
3 类中有一个私有的自己对象
针对于这三个条件,OC中都是可以做到的
类的构造方法是私有的我们只需要重写allocWithZone方法,让初始化操作只执行一次
类提供一个类方法产生对象这个可以直接定义一个类方法
类中有一个私有的自己对象我们可以在.m文件中定义一个属性即可 - 应用场景
1 某个类经常被使用(节约系统资源)
2 定义工具类
3 共享数据 - 注意点
1 不要继承单例类
2 先创建子类永远是子类对象
3 先创建父类永远是父类对象 - 单例模式:
1 懒汉模式 : 第一次用到单例对象的时候再创建
2 饿汉模式 : 一进入程序就创建一个单例对象
(下面上代码)
第一种添加互斥锁方式生成,这样做可以避免两个对象同时访问或者修改数据导致出错
第二种使用GCD方式创建的
static TestSinglePattern *pattern = nil;
//第一种方法
+(instancetype)sharedInstance{
@synchronized (self) {
if (singlePattern==nil) {
singlePattern = [[self.class alloc]init];
}
}
return singlePattern;
}
//第二种方法
+(instancetype)dispatchOnce{
static TestSinglePattern *pattern = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
pattern = [[self.class alloc]init];
});
return pattern;
}
//通过alloc创建对象
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
singlePattern = [super allocWithZone:zone];
});
return singlePattern;
}
#pragma NSCoping 协议复制对象的时候
//复制对象
- (id)copyWithZone:(NSZone *)zone
{
return singlePattern;
}
//可变复制
- (id)mutableCopyWithZone:(NSZone *)zone {
return singlePattern;
}