概述
整个应用生命周期中,只存在唯一一个实例对象的类被称作单例,所以的模块共同使用这一个对象的设计叫做单例模式
单例模式的特点和创建方式:
- 实例对象唯一,所以多个模块共同使用保证了数据唯一性。
- 有较强的灵活性。
- final关键字修饰的class、var、func标示不可被操作,继承,重写非常适合优化单例。
- Swift3.0开始放弃了dispatch_once,创建单例方式有:
final class LLNetwork: NSObject {
static let shareInstace = LLNetwork.init()
// 保证只有当前才能访问
private override init(){}
}
OC单例
- 方法一
+ (nonnull instancetype)sharedInstance {
static id instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
- 方法二
+ (nonnull instancetype)sharedInstance {
static id instance = nil;
@synchronized (self) { //保证线程安全
if (!instance) {
instance = [[self alloc] init];
}
}
return instance;
}
总结
单例保证了数据在应用运行期间的唯一性,减少了重复内存的损耗,如果单例本身内存占用过大时,要重新考虑这个模式是否适合了。另一方面,单例的访问也存在着多线程安全的问题,这需要我们合理的使用线程锁来保证单例的安全性了。
网友评论